เมื่อเรียก pd.merge(df1, df2) **โดยไม่ระบุพารามิเตอร์ on, left_on, right_on** Pandas จะ Auto-detect คอลัมน์ที่ชื่อเหมือนกัน** ในทั้งสอง DataFrame และใช้เป็น Key ในการ Join อัตโนมัติ (Inner Join)
ขั้นตอนการทำงาน
1. สร้าง DataFrame 2 ตัว มีคอลัมน์ Car ร่วมกัน
import pandas as pd
dataFrame1 = pd.DataFrame({
"Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
"Units": [100, 150, 110, 80, 110, 90]
})
dataFrame2 = pd.DataFrame({
"Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Mercedes', 'Jaguar'],
"Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
})
2. Merge โดยไม่ระบุ on
mergedRes = pd.merge(dataFrame1, dataFrame2)
print(mergedRes)
โค้ดตัวอย่างสมบูรณ์
import pandas as pd
dataFrame1 = pd.DataFrame({
"Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
"Units": [100, 150, 110, 80, 110, 90]
})
print("DataFrame1:\n", dataFrame1)
dataFrame2 = pd.DataFrame({
"Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Mercedes', 'Jaguar'],
"Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
})
print("\nDataFrame2:\n", dataFrame2)
# Merge auto-detect common column
mergedRes = pd.merge(dataFrame1, dataFrame2)
print("\nMerged data frame (auto):\n", mergedRes)
ผลลัพธ์
Merged data frame (auto):
Car Units Reg_Price
0 BMW 100 7000
1 Lexus 150 1500
2 Audi 110 5000
3 Mustang 80 8000
4 Jaguar 90 6000
คำอธิบาย
- Pandas หาคอลัมน์ที่ชื่อเหมือนกันในทั้งสอง DataFrame → พบ
Car - ใช้
Carเป็น Key ทำ Inner Join อัตโนมัติ - ผลลัพธ์เหมือนกับ
pd.merge(df1, df2, on='Car')ทุกประการ
⚠️ ข้อควรระวัง
- อาจ Merge ผิดพลาด ถ้ามีคอลัมน์ชื่อเหมือนกันแต่ความหมายต่างกัน (เช่น
idในทั้งคู่แต่เป็นคนละ entity) - หลายคอลัมน์ชื่อเหมือนกัน: Pandas จะใช้ทั้งหมดเป็น Composite Key
- แนะนำ: ระบุ
on=หรือleft_on/right_onให้ชัดเจนเสมอ เพื่อความปลอดภัยและอ่านง่าย
ตัวอย่าง Auto-detect หลายคอลัมน์
df1 = pd.DataFrame({'A': [1,2], 'B': [3,4], 'C': [5,6]})
df2 = pd.DataFrame({'A': [1,2], 'B': [3,4], 'D': [7,8]})
# Auto-detect: ใช้ A และ B เป็น key (Composite key)
pd.merge(df1, df2)
# ผลลัพธ์: จับคู่ที่ A และ B ตรงกันทั้งคู่
Best Practice
# ระบุชัดเจน (แนะนำ)
merged = pd.merge(df1, df2, on='Car', how='inner')
# หรือ left_on/right_on ถ้าชื่อต่างกัน
merged = pd.merge(df1, df2, left_on='car_id', right_on='vehicle_id')