I documenti mostrano come applicare più funzioni su un oggetto groupby alla volta usando un dict con i nomi delle colonne di output come chiavi:
In [563]: grouped['D'].agg({'result1' : np.sum,
.....: 'result2' : np.mean})
.....:
Out[563]:
result2 result1
A
bar -0.579846 -1.739537
foo -0.280588 -1.402938
Tuttavia, questo funziona solo su un oggetto groupby Series. E quando un dict viene passato in modo simile a un gruppo da DataFrame, si aspetta che le chiavi siano i nomi delle colonne a cui verrà applicata la funzione.
Quello che voglio fare è applicare più funzioni a più colonne (ma alcune colonne verranno utilizzate più volte). Inoltre, alcune funzioni dipenderanno da altre colonne nell'oggetto groupby (come le funzioni sumif). La mia soluzione attuale è quella di andare colonna per colonna e fare qualcosa come il codice sopra, usando lambdas per funzioni che dipendono da altre righe. Ma ci vuole molto tempo (penso che ci voglia molto tempo per scorrere un oggetto groupby). Dovrò cambiarlo in modo da iterare l'intero oggetto groupby in una sola corsa, ma mi chiedo se nei panda ci sia un modo integrato per farlo in modo abbastanza pulito.
Ad esempio, ho provato qualcosa di simile
grouped.agg({'C_sum' : lambda x: x['C'].sum(),
'C_std': lambda x: x['C'].std(),
'D_sum' : lambda x: x['D'].sum()},
'D_sumifC3': lambda x: x['D'][x['C'] == 3].sum(), ...)
ma come previsto ottengo un KeyError (poiché le chiavi devono essere una colonna se agg
viene chiamato da un DataFrame).
Esiste un modo integrato per fare ciò che mi piacerebbe fare, o la possibilità che questa funzionalità possa essere aggiunta o avrò solo bisogno di scorrere manualmente il groupby?
Grazie