熊猫groupby计数大于1


问题内容

这肯定是一个简单的问题,但是,这让我有些头疼。

对于以下数据框:

df = pd.DataFrame({'c0': ['a','b','a'],'c1': ['a','bb','a'],'c2':[10,20,30]})
  c0  c1  c2
0  a   a  10
1  b  bb  20
2  a   a  30

如何获得count> 1的输出?

我试过了:

df.groupby(['c0','c1'])['c2'].count()
c0  c1
a   a     2
b   bb    1

要求是:

c0  c1
a   a     2

我在寻找

x = df.groupby(['c0','c1'])['c2'].count()
x[x>1]

即单线回答。


问题答案:

使用GroupBy.transform的系列与原来一样同数据框尺寸:

df1 = df[df.groupby(['c0','c1'])['c2'].transform('count') > 1]

DataFrame.duplicated用于按列表中的指定列过滤所有重复行:

df1 = df[df.duplicated(['c0','c1'], keep=False)]

如果性能不重要或较小的DataFrame,请使用DataFrameGroupBy.filter

df1 = df.groupby(['c0','c1']).filter(lambda x: len(x) > 1)