44

我正在groupby从 Pandas 创建一个对象,DataFrame并希望选择所有大小大于 1 的组。

例子:

     A  B
0  foo  0
1  bar  1
2  foo  2
3  foo  3

以下似乎不起作用:

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

预期结果:

A
foo 0
    2
    3
4

4 回答 4

46

从 pandas 0.12 开始,您可以执行以下操作:

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

     A  B
0  foo  0
2  foo  2
3  foo  3
于 2013-08-15T21:13:15.160 回答
14

我发现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]
于 2018-08-02T16:47:15.470 回答
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
于 2012-11-01T17:00:54.720 回答
1

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

df.groupby('A').filter(lambda x: x.shape[0] > 1)
于 2021-02-13T18:07:31.850 回答