当对 Pandas groupby 操作的结果执行过滤时,它返回一个数据帧。但假设我想执行进一步的分组计算,我必须再次调用 groupby,这似乎有点绕。有更惯用的方法吗?
EDIT:
为了说明我在说什么:
我们无耻地从 Pandas 文档中窃取了一个玩具数据框,并分组:
>>> dff = pd.DataFrame({'A': np.arange(8), 'B': list('aabbbbcc')})
>>> grouped = dff.groupby('B')
>>> type(grouped)
<class 'pandas.core.groupby.DataFrameGroupBy'>
这会返回一个 groupby 对象,我们可以在该对象上进行迭代、执行分组操作等。但是如果我们过滤:
>>> filtered = grouped.filter(lambda x: len(x) > 2)
>>> type(filtered)
<class 'pandas.core.frame.DataFrame'>
我们得到一个数据框。是否有一种很好的惯用方法来获取过滤后的组,而不仅仅是属于过滤后组的原始行?
如果您想组合过滤器和聚合,我能想到的最好方法是使用三元组合过滤器和聚合if
inside apply
,返回None
对于过滤后的组,然后dropna
从最终结果中删除这些行:
grouped.apply(lambda x: x.sum() if len(x) > 2 else None).dropna()
如果您想迭代各个组,例如将它们重新组合在一起,您可以使用生成器理解
pd.concat(g for i,g in grouped if len(g)>2)
最终我认为如果groupby.filter
可以选择返回 groupby 对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)