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

标签 python pandas

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

编辑:

为了说明我在说什么:

我们无耻地从 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'>

我们得到一个数据框。是否有一种很好的惯用方式来获取过滤后的组,而不仅仅是属于过滤组的原始行?

最佳答案

如果你想组合一个过滤器和一个聚合,我能想到的最好的方法是使用 apply 中的三元 if 组合你的过滤器和聚合,为过滤组返回 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 对象的选项会更好。

关于python - 如何过滤 Pandas GroupBy 对象并获取 GroupBy 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35832475/

相关文章:

python - Pandas 获取多列的排序索引顺序

python - 在搜索表单中输入错误的查询 get's me keyerror with pandas 和 django

python - 使用 numpy 数组作为条目分组并减少 pandas 数据帧

python - 按索引名称过滤数据框行

python - 将空(ish)字符串转换为 null 的最有效方法

python - 自动查找每行的特定 pandas 列中包含的列表项的索引

python - 为什么 python 在替换一行时删除给定文件中的每一行?

python - 用 Python 替换其他 txt 文件中的字符串

python - 将维度为 nx1 的 numpy 数组转换为维度为 nx10 的 numpy 数组

python - 获取groupby后每列的百分比