เมธอด drop_duplicates() พร้อมพารามิเตอร์ keep='last' และ subset ใช้สร้าง Subset ที่เก็บเฉพาะ **รายการสุดท้าย (last occurrence)** ของค่าซ้ำ ตามคอลัมน์ที่ระบุ
ขั้นตอนการทำงาน
1. สร้าง DataFrame มีค่าซ้ำใน Car และ Place
import pandas as pd
dataFrame = pd.DataFrame({
'Car': ['BMW', 'Mercedes', 'Lamborghini', 'BMW', 'Mercedes', 'Porsche'],
'Place': ['Delhi', 'Hyderabad', 'Chandigarh', 'Delhi', 'Hyderabad', 'Mumbai'],
'UnitsSold': [85, 70, 80, 95, 55, 90]
})
2. ลบซ้ำ เก็บเฉพาะรายการสุดท้าย ตาม subset Car+Place
dataFrame2 = dataFrame.drop_duplicates(
subset=['Car', 'Place'],
keep='last'
).reset_index(drop=True)
โค้ดตัวอย่างสมบูรณ์
import pandas as pd
dataFrame = pd.DataFrame({
'Car': ['BMW', 'Mercedes', 'Lamborghini', 'BMW', 'Mercedes', 'Porsche'],
'Place': ['Delhi', 'Hyderabad', 'Chandigarh', 'Delhi', 'Hyderabad', 'Mumbai'],
'UnitsSold': [85, 70, 80, 95, 55, 90]
})
print("DataFrame:\n", dataFrame)
# ลบซ้ำ เก็บ last ตาม Car+Place
dataFrame2 = dataFrame.drop_duplicates(
subset=['Car', 'Place'],
keep='last'
).reset_index(drop=True)
print("\nUpdated DataFrame (keep last):\n", dataFrame2)
ผลลัพธ์
DataFrame:
Car Place UnitsSold
0 BMW Delhi 85
1 Mercedes Hyderabad 70
2 Lamborghini Chandigarh 80
3 BMW Delhi 95
4 Mercedes Hyderabad 55
5 Porsche Mumbai 90
Updated DataFrame (keep last):
Car Place UnitsSold
0 Lamborghini Chandigarh 80
1 BMW Delhi 95
2 Mercedes Hyderabad 55
3 Porsche Mumbai 90
คำอธิบาย
subset=['Car', 'Place']: ถือว่าซ้ำก็ต่อเมื่อ **ทั้งคู่** เหมือนกันkeep='last': เก็บแถวสุดท้ายที่พบ ลบแถวก่อนหน้าที่ซ้ำkeep='first'(default): เก็บแถวแรก ลบแถวหลังที่ซ้ำkeep=False: ลบแถวที่ซ้ำทั้งหมด (เก็บเฉพาะ unique rows)reset_index(drop=True): รีเซ็ต index ใหม่ 0,1,2... ไม่เก็บ index เดิม
ตัวอย่าง keep อื่นๆ
# เก็บแถวแรก (default)
df.drop_duplicates(subset=['Car', 'Place'], keep='first')
# ลบซ้ำทั้งหมด (เก็บเฉพาะ unique)
df.drop_duplicates(subset=['Car', 'Place'], keep=False)
# ลบซ้ำทุกคอลัมน์ (ไม่ระบุ subset)
df.drop_duplicates(keep='last')
ประสิทธิภาพ
- ใช้ hash-based algorithm เร็วมาก
- DataFrame ใหญ่: ใช้
df.duplicated(subset=..., keep='last')สร้าง mask แล้วdf[~mask]ควบคุม memory ได้ดีกว่า inplace=Trueไม่คืนค่า แก้ไข DataFrame เดิม (ไม่แนะนำ)