过滤pandas中的分组df

时间:2012-10-31 21:03:57

标签: python pandas

我正在从Pandas groupby创建一个DataFrame对象,并希望选择带有>的所有组1个尺寸。

以下似乎不起作用:

grouped[grouped.size > 1 ]

另外,如何从分组DataFrame过滤出某些值?例如,如何删除grouped列中'name'列的值为'foo''bar'的所有行?

受控示例:

df = pandas.DataFrame({'A': ['foo','bar','foo','foo'],
                       'B': range(4)})
grouped = df.groupby('A')

删除组大小groupby个对象。

我尝试了以下操作,但没有效果:

grouped[grouped.size() > 1]

我期待:

A
foo 0
    2
    3

我不确定索引/切片如何适用于grouped对象。

4 个答案:

答案 0 :(得分:41)

从熊猫0.12开始,你可以这样做:

>>> grouped.filter(lambda x: len(x) > 1)

     A  B
0  foo  0
2  foo  2
3  foo  3

答案 1 :(得分:7)

如果您仍需要解决方法:

In [49]: pd.concat([group for _, group in grouped if len(group) > 1])
Out[49]: 
     A  B
0  foo  0
2  foo  2
3  foo  3

答案 2 :(得分:3)

对于非常大的数据帧,我发现transform的效率要比filter高:

element_group_sizes = df['A'].groupby(df['A']).transform('size')
df[element_group_sizes>1]

或者,一行:

df[df['A'].groupby(df['A']).transform('size')>1]

答案 3 :(得分:0)

您可以使用方法 filter 和属性 shape

df.groupby('A').filter(lambda x: x.shape[0] > 1)