Mô tả bài toán
Cho Series, kiểm tra xem có chứa phần tử trùng lặp (duplicate) hay không.
Ví dụ 1: [1,2,3,4,5] -> Không trùng.
Ví dụ 2: [1,2,3,4,5,3] -> Có trùng (số 3).
Giải pháp 1: So sánh độ dài với unique (cách gốc)
import pandas as pd
import numpy as np
# Trường hợp không trùng
data1 = pd.Series([1,2,3,4,5])
has_dup1 = len(data1) != len(np.unique(data1))
print(f"Series 1: {'Có trùng' if has_dup1 else 'Không trùng'}")
# Trường hợp có trùng
data2 = pd.Series([1,2,3,4,5,3])
has_dup2 = len(data2) != len(np.unique(data2))
print(f"Series 2: {'Có trùng' if has_dup2 else 'Không trùng'}")
Giải pháp 2: Dùng duplicated() (khuyên dùng - chuẩn pandas)
import pandas as pd
data1 = pd.Series([1,2,3,4,5])
data2 = pd.Series([1,2,3,4,5,3])
# any() trả về True nếu có ít nhất 1 duplicate
print(f"Series 1 có trùng: {data1.duplicated().any()}")
print(f"Series 2 có trùng: {data2.duplicated().any()}")
# Xem chi tiết các bản ghi trùng
print("\nChi tiết duplicate Series 2:")
print(data2[data2.duplicated(keep=False)])
Giải pháp 3: Dùng nunique()
import pandas as pd
data = pd.Series([1,2,3,4,5,3])
# nunique() đếm số giá trị duy nhất
has_duplicate = len(data) != data.nunique()
print(f"Có trùng lặp: {has_duplicate}")
print(f"Số phần tử: {len(data)}, Số giá trị duy nhất: {data.nunique()}")
Đầu ra
Series 1: Không trùng Series 2: Có trùng Series 1 có trùng: False Series 2 có trùng: True Chi tiết duplicate Series 2: 2 3 5 3 dtype: int64 Có trùng lặp: True Số phần tử: 6, Số giá trị duy nhất: 5
Khuyên dùng: duplicated().any() hoặc len != nunique() - đều vector hóa, nhanh, dễ đọc.