Trả về DataFrame với các hàng trùng lặp bị xóa. Xem xét các cột nhất định là tùy chọn. Các chỉ mục, bao gồm các chỉ mục thời gian bị bỏ qua. Chỉ xem xét các cột nhất định để xác định các bản sao, theo mặc định, sử dụng tất cả các cột. Xác định những sao chép [nếu có] để giữ. - first
: Drop trùng lặp ngoại trừ lần xuất hiện đầu tiên. - >>> df.drop_duplicates[]
brand style rating
0 Yum Yum cup 4.0
2 Indomie cup 3.5
3 Indomie pack 15.0
4 Indomie pack 5.0
0: Drop trùng lặp ngoại trừ lần xuất hiện cuối cùng. - Sai: Thả tất cả các bản sao.
Có nên sửa đổi DataFrame thay vì tạo một cái mới.
bỏ qua_indexbool, mặc định saibool, default FalseNếu đúng, trục kết quả sẽ được dán nhãn 0, 1,,, n - 1.
Mới trong phiên bản 1.0.0.
DataFrame với các bản sao được xóa hoặc không có nếu
>>> df.drop_duplicates[] brand style rating 0 Yum Yum cup 4.0 2 Indomie cup 3.5 3 Indomie pack 15.0 4 Indomie pack 5.01.
Ví dụ
Xem xét bộ dữ liệu chứa xếp hạng ramen.
>>> df = pd.DataFrame[{ ... 'brand': ['Yum Yum', 'Yum Yum', 'Indomie', 'Indomie', 'Indomie'], ... 'style': ['cup', 'cup', 'cup', 'pack', 'pack'], ... 'rating': [4, 4, 3.5, 15, 5] ... }] >>> df brand style rating 0 Yum Yum cup 4.0 1 Yum Yum cup 4.0 2 Indomie cup 3.5 3 Indomie pack 15.0 4 Indomie pack 5.0
Theo mặc định, nó loại bỏ các hàng trùng lặp dựa trên tất cả các cột.
>>> df.drop_duplicates[] brand style rating 0 Yum Yum cup 4.0 2 Indomie cup 3.5 3 Indomie pack 15.0 4 Indomie pack 5.0
Để loại bỏ các bản sao trên [các] cột cụ thể, hãy sử dụng
>>> df.drop_duplicates[] brand style rating 0 Yum Yum cup 4.0 2 Indomie cup 3.5 3 Indomie pack 15.0 4 Indomie pack 5.02.
>>> df.drop_duplicates[subset=['brand']] brand style rating 0 Yum Yum cup 4.0 2 Indomie cup 3.5
Để loại bỏ các bản sao và giữ các lần xuất hiện cuối cùng, hãy sử dụng
>>> df.drop_duplicates[] brand style rating 0 Yum Yum cup 4.0 2 Indomie cup 3.5 3 Indomie pack 15.0 4 Indomie pack 5.03.
>>> df.drop_duplicates[subset=['brand', 'style'], keep='last'] brand style rating 1 Yum Yum cup 4.0 2 Indomie cup 3.5 4 Indomie pack 5.0
Tôi đã được đưa đến đây bởi một liên kết từ một câu hỏi trùng lặp.
Chỉ với hai cột, sẽ không đơn giản hơn để làm:
df.groupby['A']['B'].max[].reset_index[]
Và để giữ lại một hàng đầy đủ [khi có nhiều cột hơn, đó là những gì "câu hỏi trùng lặp" đã đưa tôi đến đây đã hỏi]:
df.loc[df.groupby[...][column].idxmax[]]
Ví dụ: để giữ lại hàng đầy đủ trong đó
>>> df.drop_duplicates[] brand style rating 0 Yum Yum cup 4.0 2 Indomie cup 3.5 3 Indomie pack 15.0 4 Indomie pack 5.04 lấy tối đa của nó, cho mỗi nhóm
>>> df.drop_duplicates[] brand style rating 0 Yum Yum cup 4.0 2 Indomie cup 3.5 3 Indomie pack 15.0 4 Indomie pack 5.05, chúng tôi sẽ làm:
out = df.loc[df.groupby[['A', 'B']['C'].idxmax[]]
Khi có tương đối ít nhóm [tức là, rất nhiều bản sao], điều này nhanh hơn giải pháp
>>> df.drop_duplicates[] brand style rating 0 Yum Yum cup 4.0 2 Indomie cup 3.5 3 Indomie pack 15.0 4 Indomie pack 5.06 [ít sắp xếp]:
Setup:
n = 1_000_000
df = pd.DataFrame[{
'A': np.random.randint[0, 20, n],
'B': np.random.randint[0, 20, n],
'C': np.random.uniform[size=n],
'D': np.random.choice[list['abcdefghijklmnopqrstuvwxyz'], size=n],
}]
[Thêm
>>> df.drop_duplicates[] brand style rating 0 Yum Yum cup 4.0 2 Indomie cup 3.5 3 Indomie pack 15.0 4 Indomie pack 5.07 để đảm bảo giải pháp bằng nhau]:
%timeit df.loc[df.groupby[['A', 'B']]['C'].idxmax[]].sort_index[]
# 101 ms ± 98.7 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
%timeit df.sort_values[['C', 'A', 'B'], ascending=False].drop_duplicates[['A', 'B']].sort_index[]
# 667 ms ± 784 µs per loop [mean ± std. dev. of 7 runs, 1 loop each]