这必须是一个简单的问题,但是,这使我的头有些困惑。
对于以下数据框:
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]
即一线回答。
答案 0 :(得分:2)
将GroupBy.transform
用于具有与原始DataFrame相同大小的Series:
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)