Finché è possibile classificare un passo come qualcosa che restituisce un dataframe, e prende una dataframe (possibilmente con più argomenti), quindi è possibile utilizzare pipe
. Se c'è un vantaggio nel farlo, è un'altra domanda.
Qui, per esempio, è possibile utilizzare
df\
.pipe(lambda df_, x, y: df_[(df_.a >= x) & (df_.b <= y)], 2, 8)\
.pipe(lambda df_: df_.groupby(df_.x))\
.mean()
Si noti come la prima fase è un lambda che prende 3 argomenti, con il 2 e l'8 passati come parametri. Questo non è l'unico modo per farlo - è equivalente a
.pipe(lambda df_: df_[(df_.a >= 2) & (df_.b <= 8)])\
noti inoltre che è possibile utilizzare
df\
.pipe(lambda df_, x, y: df[(df.a >= x) & (df.b <= y)], 2, 8)\
.groupby('x')\
.mean()
Qui lambda prende df_
, ma opera su df
, e la seconda pipe
è stata sostituito con uno groupby
.
Il primo cambio funziona qui, ma è gragile. È che succede a per funzionare poiché questo è il primo stadio pipe. Se sarebbe una fase successiva, potrebbe richiedere un DataFrame con una dimensione e tentare di filtrarlo su una maschera con un'altra dimensione, ad esempio.
Il secondo cambiamento va bene. Di fronte, penso che sia più leggibile. In sostanza, tutto ciò che prende un DataFrame e ne restituisce uno, può essere chiamato direttamente o tramite pipe
.
fonte
2016-02-28 19:58:24
Non vedo perché utilizzare 'pipe' sarebbe utile qui. 'df [(df.a> = 2) & (df.b <= 8)]. groupby ('x'). mean()' farà la stessa cosa, no? – jme
che è vero @jme, questo è un esempio di giocattolo e nel mio codice più grande, ho più passaggi. Inoltre l'operatore '.' rende tutto più ordinato. – user308827
Questo è deja vu o [duplicato] (http://stackoverflow.com/questions/35045805) :-) – Primer