2017-04-11 72 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

謝謝!我從來沒有想過在這種情況下我可以使用'重複' –