Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.python > #3451

Re: pandas switch-on switch-off

From Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
Newsgroups fr.comp.lang.python
Subject Re: pandas switch-on switch-off
Date 2021-04-06 22:00 +0200
Organization Université de Strasbourg
Message-ID <87zgyb89q4.fsf@universite-de-strasbourg.fr.invalid> (permalink)
References (1 earlier) <6066e50d$0$32516$426a74cc@news.free.fr> <s46rfk$kkb$1@dont-email.me> <60672e97$0$21601$426a74cc@news.free.fr> <606c055d$0$12681$426a74cc@news.free.fr> <606c8f5e$0$3700$426a74cc@news.free.fr>

Show all headers | View raw


Damien Wyart <damien.wyart@free.fr> writes:

> * Nicolas <nicolasp@aaton.com> in fr.comp.lang.python:
>> Que se passera t-il si 2 (ou plus) jeux de données sont à traiter ?
>
> C'est vrai que j'aurais pu souligner que cette solution est "quick &
> dirty" ; vu le contexte qui semblait plus être un "toy example" qu'autre
> chose, cela m'avait semblé intéressant de montrer qu'on pouvait éviter
> la boucle "pour le fun".
[...]

Note que le boucle est cachée dans apply...

A tout hasard, en Python cru (ou presque), ça s'écrirait :

| import functools
| 
| df = [[0, 0], [0, 0], [1, 0], [0, 0], [0, 1], [0, 0], [0, 0], [0, 1],
|       [0, 0], [1, 0], [0, 0], [1, 0], [0, 0], [0, 1], [0, 1], [0, 0],
|       [0, 0], [1, 0], [1, 1], [0, 0]]
| 
| def res (acc, c):
|     return False if c[1] else c[0] or acc
| 
| r = functools.reduce (res, df)

J'imagine que pandas doit fournir un truc similaire (ça s'appelle
fold_left ou reduce traditionnellement, mais comme pandas semble appeler
"apply" quelque chose qui s'appelle "map" en général, je m'abstiens de
deviner ; il y a de bonnes raisons pour l'usage d'autres noms, cela dit).

Si tu veux vraiment conserver tous les résultats intermédiaires, c'est
un peu plus sport :

| def reslist (accl, c):
|     lst, state = accl
|     r = res (state, c)
|     return (lst + [c + [r]],r)
| 
| rl = functools.reduce (reslist, df, ([],False))
| print (rl[0])

C'est succinct mais ce n'est pas efficace à cause des listes de Python
(c'est fait pour des listes fonctionnelles, càd chaînées, pas pour des
"vecteurs" comme les listes standard). L'appel de reduce construit une
nouvelle liste. Si tu cherches la performance, il vaut mieux écrire la
boucle explicitement, et utiliser append() ou modifier les éléments au
passage (comme dans ta première solution).

-- Alain.

Back to fr.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

pandas switch-on switch-off carboleum <c4rboleum-NOSPAM@gmail.com> - 2021-04-02 11:19 +0200
  Re: pandas switch-on switch-off Damien Wyart <damien.wyart@free.fr> - 2021-04-02 11:34 +0200
    Re: pandas switch-on switch-off carboleum <c4rboleum-NOSPAM@gmail.com> - 2021-04-02 12:25 +0200
      Re: pandas switch-on switch-off Damien Wyart <damien.wyart@free.fr> - 2021-04-02 16:47 +0200
        Re: pandas switch-on switch-off carboleum <c4rboleum-NOSPAM@gmail.com> - 2021-04-02 18:29 +0200
        Re: pandas switch-on switch-off Nicolas <nicolasp@aaton.com> - 2021-04-06 08:53 +0200
          Re: pandas switch-on switch-off Damien Wyart <damien.wyart@free.fr> - 2021-04-06 18:42 +0200
            Re: pandas switch-on switch-off Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2021-04-06 22:00 +0200
            Re: pandas switch-on switch-off Nicolas <nicolasp@aaton.com> - 2021-04-07 08:50 +0200
  Re: pandas switch-on switch-off carboleum <c4rboleum-NOSPAM@gmail.com> - 2021-07-09 15:52 +0200
    Re: pandas switch-on switch-off Damien Wyart <damien.wyart@free.fr> - 2021-07-15 11:23 +0200
      Re: pandas switch-on switch-off Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2021-07-15 13:20 +0200
      Re: pandas switch-on switch-off Carboléüm <c4rboleumNOSPAM@gmail.com> - 2021-07-16 10:13 +0200
    Re: pandas switch-on switch-off Carboleum <c4rboleum**NOSPAM**@gmail.com.invalid> - 2022-04-03 14:51 +0200
      Re: pandas switch-on switch-off Damien Wyart <damien.wyart@free.fr> - 2022-04-12 07:34 +0200

csiph-web