Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python - รวม (Merge) สอง Pandas DataFrame แบบไม่ระบุคอลัมน์ (Auto Detect)

เมื่อเรียก 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')