Quando si utilizza df.mean() viene visualizzato un risultato in cui viene fornita la media per ogni colonna. Ora diciamo che voglio la media della prima colonna e la somma del secondo. C'è un modo per fare questo? Non voglio dover smontare e rimontare il dataframe.Panda: applica diverse funzioni a diverse colonne
La mia idea iniziale era di fare qualcosa sulla falsariga di pandas.groupby.agg() in questo modo:
df = pd.DataFrame(np.random.random((10,2)), columns=['A','B'])
df.apply({'A':np.mean, 'B':np.sum}, axis=0)
Traceback (most recent call last):
File "<ipython-input-81-265d3e797682>", line 1, in <module>
df.apply({'A':np.mean, 'B':np.sum}, axis=0)
File "C:\Users\Patrick\Anaconda\lib\site-packages\pandas\core\frame.py", line 3471, in apply
return self._apply_standard(f, axis, reduce=reduce)
File "C:\Users\Patrick\Anaconda\lib\site-packages\pandas\core\frame.py", line 3560, in _apply_standard
results[i] = func(v)
TypeError: ("'dict' object is not callable", u'occurred at index A')
Ma è chiaro che questo non funziona. Sembra che passare un dict sarebbe un modo intuitivo per farlo, ma c'è un altro modo (ancora senza smontare e rimontare il DataFrame)?
Questo è davvero carino. La mia soluzione era inserire una colonna di quelli nel dataframe, facendo groupby su quella colonna e poi passando un dict al metodo di aggregazione. – pbreach
Grazie! Ho notato che questo fallisce se ci sono più colonne nel DataFrame di chiavi nella funzione dict. @ bill-lascia che hai visto anche tu? –
Un'implementazione completa dovrebbe includere una clausola KeyError di prova che restituisce una funzione di identità: lambda x: x –