2013-06-05 5 views

Trả lời

17

Có lẽ đơn giản nhất để sử dụng một groupby (giả sử họ có tên trùng lặp quá):

In [11]: df 
Out[11]: 
    A B B 
0 a 4 4 
1 b 4 4 
2 c 4 4 

In [12]: df.T.groupby(level=0).first().T 
Out[12]: 
    A B 
0 a 4 
1 b 4 
2 c 4 

Nếu họ có khác nhau tên bạn có thể drop_duplicates trên transpose:

In [21]: df 
Out[21]: 
    A B C 
0 a 4 4 
1 b 4 4 
2 c 4 4 

In [22]: df.T.drop_duplicates().T 
Out[22]: 
    A B 
0 a 4 
1 b 4 
2 c 4 

Thường read_csv thường sẽ đảm bảo chúng có tên khác nhau ...

+0

FYI @Andy, có một tùy chọn mới trong 0.11.1 kiểm soát '' mangle_dup_cols'' này; mặc định là TO mangle (ví dụ: tạo ra các cols độc đáo), trong 0,12, điều này sẽ thay đổi để rời khỏi các con dups tại chỗ – Jeff

2

Chuyển đổi là một ý tưởng tồi khi làm việc với các DataFrames lớn. Xem câu trả lời này cho giải pháp thay thế hiệu quả cho bộ nhớ: https://stackoverflow.com/a/32961145/759442

+0

Chỉ cần một lưu ý cho những người khác rằng câu trả lời tốt nhất không phải là một chấp nhận trong chủ đề đó. Câu trả lời hay nhất -> https://stackoverflow.com/a/40435354/2507197 – Alter

0

Tôi hiểu rằng đây là một câu hỏi cũ, nhưng gần đây tôi có vấn đề này giống nhau và không ai trong số các giải pháp này làm việc cho tôi, hoặc đề nghị lặp phô diễn một overkill bit. Cuối cùng, tôi chỉ tìm thấy chỉ mục của cột trùng lặp không mong muốn và đã bỏ chỉ mục cột đó. Vì vậy, miễn là bạn biết chỉ mục của cột này sẽ hoạt động (có thể bạn có thể tìm thấy thông qua gỡ lỗi hoặc báo cáo in):

df.drop(df.columns[i], axis=1)