Pandas groupby,过滤并将输出放入列表中

Posted

技术标签:

【中文标题】Pandas groupby,过滤并将输出放入列表中【英文标题】:Pandas groupby, filter and put the output in a list 【发布时间】:2018-01-22 15:44:42 【问题描述】:

大家好,我想在我的代码中实现的这个函数有问题。假设我正在处理这个数据框。

df = pd.DataFrame([[100, 1],[100, 1],[200, 2],[200, 2],[200, 2]], columns=['a','b'])

现在我想先计算“a”列的唯一条目,然后过滤选择“a”列中大于 3 的元素

group=df.groupby('a').count()
filter=group['b'].isin([3])

所需的输出是一个列表,其中仅包含“a”系列中满足过滤条件的那些元素(名为“filter”),因此可以从这个新功能中过滤回初始过滤器,以便 i将只保留第 2、3、4 行(从零开始计数)。

我希望我的意图很明确,但当然,如果我从错误的角度处理问题,欢迎提出任何建议。

【问题讨论】:

“更简单的方法”是什么意思?你的代码不起作用。或者这应该是伪代码来说明,你试图做什么?也许您想阅读How to create a Minimal, Complete, and Verifiable example? '一种更简单的方法'意味着我可能从错误的角度来解决问题......是的,这段代码实际上不起作用,所以意味着过滤后我无法返回过滤后的系列作为列表。 a.tolist()filter.isin([3]) 由于不同的原因无法正常工作。我只能鼓励你阅读链接,我发布了。玩具数据输入/输出通常非常有助于说明问题。如果我是你,我会相应地编辑问题。 期望的输出是什么?结帐this SO page 了解如何创建一个好的示例。 【参考方案1】:

IIUC,我认为您没有足够的测试数据来测试“大于 3”,但是您可以测试“大于 2”。

df[df.groupby('a')['a'].transform('count').gt(2)]

输出:

     a  b
2  200  2
3  200  2
4  200  2

【讨论】:

感谢您的回答。无论如何,首先我想计算“200”出现的次数,然后(因为它出现 3 次)过滤值。 @Frank_Mrn 这就是我在这里所做的。 groupby('a')['a'] 计算 ['a'] 的每个值出现的次数,如果该值超过 2,则我们使用布尔索引仅显示这些行。【参考方案2】:
In [1]: import pandas as pd

In [2]: df = pd.DataFrame([[100, 1],[100, 1],[200, 2],[200, 2],[200, 2]], columns=['a','b'])

In [3]: pd.concat([i[1] for i in df.groupby('a') if len(i[1]) >2 ])
Out[3]: 
     a  b
2  200  2
3  200  2
4  200  2

【讨论】:

以上是关于Pandas groupby,过滤并将输出放入列表中的主要内容,如果未能解决你的问题,请参考以下文章

列表中的 Pandas groupby 值

pandas 中的新列 - 通过应用列表 groupby 将系列添加到数据框

如何在 pandas 中使用过滤条件和 groupby

使用 apply() 函数在 pandas 中的 groupby 之后创建列表

使用 groupby 的结果过滤 pandas 数据框

Pandas groupby 对象过滤