2017-04-11 9 views

Odpowiedz

14

To może działać:

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

Wynik:

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

To było moje podejście, plus jeden. Aby uczynić go bardziej wydajnym, możesz przekazać 'sort = False' do' value_counts' – piRSquared

+0

Dobra odpowiedź! Twoje brace/parenth w drugiej linii są jednak w tył. Edytowałbym siebie, ale chcę uniknąć ryzyka zniszczenia twojego formatu na telefonie :) – miradulo

9

Zastosowanie 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

Dziękuję! Naprawdę pomocne –

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

Odszukuje wiersze w ramce danych, w których istnieją duplikaty w kolumnie CustID. keep=False mówi funkcję duplicated oznaczyć wszystkie zduplikowane wiersze jako True (a nie tylko pierwszy lub ostatni z nich):

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

EDIT

Patrząc na docs dla duplicated wygląda jak można również zrobić:

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

Choć wydaje się to być około 100 mikrosekund wolniej niż oryginał (458 ms vs. 545 mikrosekund na podstawie przykładowego dataframe)

+0

Myślę, że najszybsze rozwiązanie. – jezrael

+0

Myślę, że jest to najbardziej intuicyjne podejście, ponieważ mamy do czynienia z duplikatami. +1 – pansen

+0

Dziękujemy! Nigdy nie myślałem, że mogę użyć "duplikatu" w tym przypadku –

Powiązane problemy