W docs pokazują, jak zastosować wiele funkcji w obiekcie GroupBy naraz przy użyciu dict z nazwami kolumn wyjście jako klucze:
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
Działa to jednak tylko na obiekcie Groupby według grup. Kiedy podobnie dyktafon jest przekazywany do grupy przez DataFrame, oczekuje, że kluczami będą nazwy kolumn, do których funkcja zostanie zastosowana.
Chcę zastosować wiele funkcji do kilku kolumn (ale niektóre kolumny będą obsługiwane wielokrotnie). Ponadto niektóre funkcje będą zależeć od innych kolumn w obiekcie grupowania (takich jak funkcje sumif). Moje obecne rozwiązanie polega na przechodzeniu kolumna po kolumnie i robieniu czegoś podobnego do powyższego kodu, używając lambdas dla funkcji zależnych od innych wierszy. Ale zajmuje to dużo czasu (myślę, że iteracja przez obiekt grupujący zajmuje dużo czasu). Będę musiał to zmienić, aby w jednym przebiegu iterować cały obiekt grupujący według jednego obiektu, ale zastanawiam się, czy w pandach nie ma wbudowanego sposobu, aby zrobić to nieco czysto.
Na przykład próbowałem czegoś takiego
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(), ...)
ale zgodnie z oczekiwaniami otrzymuję KeyError (ponieważ klucze muszą być kolumną, jeśli agg
są wywoływane z DataFrame).
Czy istnieje jakiś sposób na wykonanie tego, co chciałbym zrobić, lub możliwość dodania tej funkcji, czy też będę musiał po prostu ręcznie iterować w grupie?
Dzięki