2017-04-11 33 views

Trả lời

14

Điều này có thể làm việc:

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

Kết quả:

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

Đây là cách tiếp cận của tôi, cộng với một. Để làm cho nó hiệu quả hơn, bạn có thể chuyển 'sort = False' thành' value_counts' – piRSquared

+0

Câu trả lời hay! Tuy nhiên, dấu ngoặc/ngoặc đơn của bạn trên dòng thứ hai là ngược lại. Tôi muốn chỉnh sửa bản thân nhưng muốn tránh nguy cơ phá hủy định dạng của bạn trên điện thoại của tôi :) – miradulo

9

Sử dụng 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

Cảm ơn bạn! Thực sự hữu ích –

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

Điều này tìm thấy các hàng trong khung dữ liệu có tồn tại các bản sao trong cột CustID. Các keep=False kể duplicated chức năng để đánh dấu tất cả các hàng trùng lặp như True (như trái ngược với chỉ những người đầu tiên hoặc cuối cùng):

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

EDIT

Nhìn vào các tài liệu cho duplicated có vẻ như bạn có thể cũng làm:

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

Mặc dù điều này có vẻ chậm hơn khoảng 100 µs so với bản gốc (458 µs so với 545 µs dựa trên khung dữ liệu ví dụ)

+0

Tôi nghĩ rằng giải pháp nhanh nhất. – jezrael

+0

Tôi nghĩ đây là phương pháp trực quan nhất kể từ khi chúng tôi xử lý các bản sao. +1 – pansen

+0

Cảm ơn bạn! Tôi chưa bao giờ nghĩ rằng tôi có thể sử dụng 'trùng lặp' trong trường hợp này –

Các vấn đề liên quan