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

时间:2018-01-22 15:44:43

标签: python pandas subtotal

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

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”),因此从这个新功能中可以过滤回初始过滤器以便我将仅保留2,3,4行(从零开始计算)。

我希望我的意图很明确,但当然如果我从错误的观点来看问题,欢迎提出任何建议。

2 个答案:

答案 0 :(得分:0)

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

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

输出:

     a  b
2  200  2
3  200  2
4  200  2

答案 1 :(得分:0)

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