如何过滤Pandas GroupBy对象并获取GroupBy对象?

Rob*_*lan 10 python pandas

对Pandas groupby操作的结果执行过滤时,它返回一个数据帧.但是假设我想要进行进一步的组计算,我必须再次调用groupby,这似乎有点圆了.有没有更惯用的方法呢?

编辑:

为了说明我在说什么:

我们无耻地从Pandas docs和group中窃取玩具数据框:

>>> dff = pd.DataFrame({'A': np.arange(8), 'B': list('aabbbbcc')})
>>> grouped = dff.groupby('B')
>>> type(grouped)
<class 'pandas.core.groupby.DataFrameGroupBy'>
Run Code Online (Sandbox Code Playgroud)

这将返回一个groupby对象,我们可以通过该对象进行迭代,执行分组操作等.但是如果我们过滤:

>>> filtered = grouped.filter(lambda x: len(x) > 2)
>>> type(filtered)
<class 'pandas.core.frame.DataFrame'>
Run Code Online (Sandbox Code Playgroud)

我们找回了一个数据帧.是否有一个很好的惯用方法来获取过滤后的组,而不仅仅是属于过滤组的原始行?

max*_*moo 3

如果您想组合过滤器和聚合,我能想到的最好方法是使用三元ifinside组合过滤器和聚合apply,返回None过滤组,然后dropna从最终结果中删除这些行:

grouped.apply(lambda x: x.sum() if len(x) > 2 else None).dropna()
Run Code Online (Sandbox Code Playgroud)

如果您想迭代这些组,例如将它们重新组合在一起,您可以使用生成器理解

pd.concat(g for i,g in grouped if len(g)>2)
Run Code Online (Sandbox Code Playgroud)

groupby.filter最终我认为如果可以选择返回 groupby 对象会更好。