2017-04-11 73 views

回答

14

这可能工作:

counts = df['CustID'].value_counts() 
df[df['CustID'].isin(counts.index[counts > 1])] 

结果:

CustID Purchase  Time 
0  A Item1 01/01/2011 
3  A Item2 03/01/2011 
+2

这是我的方法,加上一个。为了提高效率,你可以将'sort = False'传递给'value_counts' – piRSquared

+0

好的答案!不过,您的大括号/父母在第二行是倒退的。我会编辑自己,但希望避免破坏我手机上格式的风险:) – miradulo

9

使用filter

df.groupby('CustID').filter(lambda x: len(x) > 1) 
CustID Purchase  Time 
0  A Item1 01/01/2011 
3  A Item2 03/01/2011 
+0

谢谢!真的有帮助 –

12
df[df['CustID'].duplicated(keep=False)] 

这会找到数据框中CustID列中存在重复项的行。该keep=False告诉duplicated功能,所有重复行标记为True(而不是仅仅在第一个或最后的):

CustID Purchase  Time 
0  A Item1 01/01/2011 
3  A Item2 03/01/2011 

编辑

在文档寻找duplicated它看起来像你可以也可做:

df[df.duplicated('CustID', keep=False)] 

虽然这似乎是比原来慢约100微秒(μs的458与545微秒基础上,例如数据帧)

+0

我认为最快的解决方案。 – jezrael

+0

我认为这是最直观的方法,因为我们处理重复。 +1 – pansen

+0

谢谢!我从来没有想过在这种情况下我可以使用'重复' –