Podczas korzystania z metody df.mean() otrzymuję wynik, w którym podana jest średnia dla każdej kolumny. Teraz powiedzmy, że chcę średnią pierwszej kolumny i sumę drugiej. Czy jest jakiś sposób na zrobienie tego? Nie chcę demontować i ponownie składać ramek danych.Pandy: zastosowanie różnych funkcji do różnych kolumn
Mój początkowy pomysł był zrobić coś na wzór pandas.groupby.agg() tak:
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')
Ale oczywiście to nie działa. Wydaje się, że przekazanie dyktatury byłoby intuicyjnym sposobem na zrobienie tego, ale czy istnieje inny sposób (ponownie bez demontowania i ponownego tworzenia DataFrame)?
To właściwie całkiem niezłe. Moje obejście polegało na wstawieniu kolumny do ramki danych, wykonaniu grupy w tej kolumnie, a następnie przekazaniu dyktatu do metody zbiorczej. – pbreach
Dziękujemy! Zauważam, że to się nie powiedzie, jeśli w ramce DataFrame jest więcej kolumn niż w funkcji dyktafon. @ Bill-Leton też to widziałeś? –
Pełna implementacja powinna zawierać klauzulę tryout KeyError, która zwraca funkcję tożsamości: lambda x: x –