我正在从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')
删除组大小
我尝试了以下操作,但没有效果:
grouped[grouped.size() > 1]
我期待:
A
foo 0
2
3
我不确定索引/切片如何适用于grouped
对象。
答案 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)