2012-09-07 41 views
24

Tôi có DataFrame có các hàng trùng lặp. Tôi muốn nhận được một DataFrame với một chỉ mục duy nhất và không có bản sao. Bạn có thể bỏ các giá trị trùng lặp. Điều này có thể không? Nó sẽ được thực hiện bởi groupby?Pandas: dataframe duy nhất

Trả lời

51
In [29]: df.drop_duplicates() 
Out[29]: 
    b c 
1 2 3 
3 4 0 
7 5 9 
+0

Điều đáng lưu ý là việc này xảy ra lần đầu tiên hoặc lần xuất hiện cuối cùng. Vì vậy, bạn cần phải sắp xếp theo một số lượng khác đầu tiên (nếu bạn may mắn) hoặc làm một số logic nhóm phức tạp anyway. – ely

+2

Điều này là sai. drop_duplicates chỉ hoạt động trên các giá trị (ít nhất là trong phiên bản của tôi). Bạn cần đặt lại_index nếu bạn muốn thả chỉ mục và giá trị hoặc chỉ làm việc với chỉ mục nếu bạn muốn có chỉ mục duy nhất. Có thể có một cách khác ngoài groupby để thực thi chỉ mục duy nhất? – mathtick

+1

Sử dụng 'df.drop_duplicates (inplace = True)' nếu bạn không muốn gán một biến mới. –

10

Đã tìm ra một cách để thực hiện việc đó bằng cách đọc các ví dụ về tài liệu split-apply-combine.

df = pandas.DataFrame({'b':[2,2,4,5], 'c': [3,3,0,9]}, index=[1,1,3,7]) 
df_unique = df.groupby(level=0).first() 

df 
    b c 
1 2 3 
1 2 3 
3 4 0 
7 5 9 

df_unique 
    b c 
1 2 3 
3 4 0 
7 5 9 
+0

này dựa trên các chỉ số hàng được nhân đôi cho hàng nơi các trường dữ liệu (b, c) được nhân đôi, làm cho hiệu quả phần chỉ số của hàng của bạn như là vector mà bạn muốn là duy nhất (không bị trùng lặp). – hobs

+3

Nếu bạn đã sao chép mục nhập chỉ mục, đây là câu trả lời bạn muốn. – rogueleaderr

+0

Tôi đã nhận 'ValueError: Chỉ mục chứa các mục trùng lặp, không thể định hình lại' khi thực hiện' unstack' trên MultIndex nhưng giải pháp này làm việc cho điều đó chỉ tôi phải làm 'df_unique = df.groupby (level = [0,1]). đầu tiên() ' – dashesy

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