Podczas wykonywania filtru na wynik operacji grupowania Pandy zwraca ramkę danych. Ale zakładając, że chcę wykonać dalsze obliczenia grupowe, muszę ponownie zadzwonić do groupby, co wydaje mi się dość okrągłe. Czy istnieje bardziej idiomatyczny sposób robienia tego?Jak mogę filtrować obiekt Pandas GroupBy i odzyskać obiekt GroupBy?
EDIT:
Aby zilustrować to, co mówię:
Mamy bezczelnie kraść dataframe zabawka z docs Pandy i grupa:
>>> dff = pd.DataFrame({'A': np.arange(8), 'B': list('aabbbbcc')})
>>> grouped = dff.groupby('B')
>>> type(grouped)
<class 'pandas.core.groupby.DataFrameGroupBy'>
Zwraca GroupBy obiekt, nad którym możemy dokonywać iteracji, wykonywać operacje grupowe itp. Ale jeśli filtrujemy:
>>> filtered = grouped.filter(lambda x: len(x) > 2)
>>> type(filtered)
<class 'pandas.core.frame.DataFrame'>
Otrzymujemy z powrotem ramkę danych. Czy istnieje ładny idiomatyczny sposób na odzyskanie odfiltrowanych grup zamiast samych oryginalnych wierszy należących do filtrowanych grup?
Podaj przykład tego, o czym mówisz. – BrenBarn
Myślę, że jest to dobra misja, w SQL można łączyć groupby by i filter jako 'SELECT user, SUM (likes) GROUP BY user POSIADAJĄC suma (polubienia)> 10' podczas gdy w pandach trzeba zrobić' df. groupby ('user'). filter (lambda x: len (x)> 10) .groupby ('user'). likes.sum() '; może odpowiedź będzie zawierać słowo kluczowe filtr w 'groupby' lub' as_index' w 'filter'? – maxymoo
@BrenBarn: przykład został dodany. –