บทนำ
การรวม (concatenate) DataFrame หลายตัวอาจทำให้เกิดแถวซ้ำ ใช้ pd.concat() รวม แล้วตามด้วย drop_duplicates() ลบแถวที่ซ้ำกันทั้งแถว
ตัวอย่างโค้ด
import pandas as pd
# DataFrame 1
df1 = pd.DataFrame({
"Car": ['BMW', 'Jaguar', 'Audi', 'Mustang'],
"Units": [100, 150, 110, 80]
})
# DataFrame 2
df2 = pd.DataFrame({
"Car": ['Tesla', 'Jaguar', 'Mercedes', 'Mustang'],
"Units": [120, 150, 180, 80]
})
print("DataFrame 1:")
print(df1)
print("\nDataFrame 2:")
print(df2)
# รวมและลบซ้ำ
concat_result = pd.concat([df1, df2]).drop_duplicates()
print("\nรวมและลบแถวซ้ำ:")
print(concat_result)
ผลลัพธ์
DataFrame 1:
Car Units
0 BMW 100
1 Jaguar 150
2 Audi 110
3 Mustang 80
DataFrame 2:
Car Units
0 Tesla 120
1 Jaguar 150
2 Mercedes 180
3 Mustang 80
รวมและลบแถวซ้ำ:
Car Units
0 BMW 100
1 Jaguar 150
2 Audi 110
3 Mustang 80
0 Tesla 120
2 Mercedes 180
คำอธิบาย
- Jaguar 150 และ Mustang 80 ปรากฏในทั้งสอง DataFrame → ถูกลบซ้ำเหลือ 1 แถว
drop_duplicates()เปรียบเทียบทุกคอลัมน์ (subset=None default)- Index ถูกรีเซ็ตไม่ได้ (ยังคง index เดิม) → ใช้
ignore_index=Trueใน concat
พารามิเตอร์สำคัญของ drop_duplicates()
| พารามิเตอร์ | คำอธิบาย | ค่าเริ่มต้น |
|---|---|---|
subset | คอลัมน์ที่ใช้เปรียบเทียบ (list หรือ column name) | None (ทุกคอลัมน์) |
keep | 'first'/'last'/False - เก็บอันไหน | 'first' |
inplace | True = แก้ไข inplace | False |
ignore_index | True = รีเซ็ต index | False |
ตัวอย่างการใช้ subset และ keep
# ลบซ้ำเฉพาะคอลัมน์ Car (เก็บแถวสุดท้าย)
df_dedup = pd.concat([df1, df2]).drop_duplicates(subset=['Car'], keep='last')
print(df_dedup)
# Car Units
# 2 Audi 110
# 1 Jaguar 150 ← จาก df2 (last)
# 3 Mustang 80 ← จาก df2 (last)
# 0 Tesla 120
# 2 Mercedes 180
ประสิทธิภาพ
concat: O(n) สร้าง DataFrame ใหม่drop_duplicates: O(n log n) เนื่องจากต้อง sort/hash- สำหรับข้อมูลใหญ่: พิจารณา
df.drop_duplicates(subset=key_cols)ก่อน concat
สรุป
ใช้ pd.concat([df1, df2]).drop_duplicates() รวม DataFrame และลบแถวซ้ำทั้งแถว ใช้ subset และ keep ควบคุมการลบซ้ำ เลือก ignore_index=True ใน concat เพื่อ index สวย