Zastosuj wiele funkcji do wielu kolumn grupowych
Thedocs pokaż, jak zastosować wiele funkcji na obiekcie grupowym naraz, używając dyktatu z nazwami kolumn wyjściowych jako kluczy:
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
Jednak działa to tylko w przypadku obiektu grupy Groupby. A gdy dykta zostanie przekazana podobnie do grupy przez DataFrame, oczekuje, że klucze będą nazwami kolumn, do których funkcja zostanie zastosowana.
To, co chcę zrobić, to zastosować wiele funkcji do kilku kolumn (ale niektóre kolumny będą obsługiwane wielokrotnie). Również,niektóre funkcje będą zależeć od innych kolumn w obiekcie Groupby (jak funkcje sumif). Moje obecne rozwiązanie polega na przechodzeniu kolumna po kolumnie i robieniu czegoś podobnego do powyższego kodu, używając lambd dla funkcji zależnych od innych wierszy. Ale to zajmuje dużo czasu (myślę, że iterowanie obiektu grupowego zajmuje dużo czasu). Będę musiał to zmienić, aby przejść przez cały obiekt grupowy w jednym przebiegu, ale zastanawiam się, czy w pandach jest wbudowany sposób, aby zrobić to trochę 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ę błąd KeyError (ponieważ klucze muszą być kolumną, jeśliagg
jest wywoływany z DataFrame).
Czy jest jakiś wbudowany sposób na zrobienie tego, co chcę zrobić, lub możliwość dodania tej funkcji, czy też po prostu muszę ręcznie przeglądać grupę?
Dzięki