ฟังก์ชัน pd.merge() ใช้รวมสอง DataFrame ตามคอลัมน์ร่วม (Common Column / Key) โดยระบุพารามิเตอร์ on='column_name' เป็น Inner Join (default) เก็บเฉพาะแถวที่มี key ตรงกันในทั้งสองฝั่ง
ขั้นตอนการทำงาน
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 ตามคอลัมน์ Car
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car')
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 ตามคอลัมน์ Car
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car')
print("\nMerged data frame (common column):\n", mergedRes)
ผลลัพธ์
Merged data frame (common column):
Car Units Reg_Price
0 BMW 100 7000
1 Lexus 150 1500
2 Audi 110 5000
3 Mustang 80 8000
4 Jaguar 90 6000
คำอธิบาย
- Inner Join (default): มีแถวที่ Car ตรงกันในทั้งสองฝั่ง 5 คู่ (BMW, Lexus, Audi, Mustang, Jaguar)
- Bentley (อยู่ df1 ไม่อยู่ df2) และ Mercedes (อยู่ df2 ไม่อยู่ df1) ถูกลบออก
- คอลัมน์ Car ไม่ซ้ำในทั้งสอง → One-to-One relationship
พารามิเตอร์ merge สำคัญ
| พารามิเตอร์ | คำอธิบาย |
|---|---|
on | ชื่อคอลัมน์ร่วม (ต้องมีในทั้งสอง) |
left_on, right_on | ชื่อคอลัมน์ต่างกันในแต่ละฝั่ง |
left_index, right_index | True = ใช้ index แทนคอลัมน์ |
how | 'inner', 'left', 'right', 'outer', 'cross' |
suffixes | ('_x', '_y') คำนำหน้าคอลัมน์ซ้ำ |
indicator | True = เพิ่มคอลัมน์ _merge แสดงที่มา |
validate | '1:1', '1:m', 'm:1', 'm:m' ตรวจสอบความสัมพันธ์ |
ตัวอย่างเพิ่มเติม
# Left Join (เก็บ df1 ทั้งหมด)
pd.merge(df1, df2, on='Car', how='left')
# Outer Join (เก็บทั้งคู่)
pd.merge(df1, df2, on='Car', how='outer')
# ชื่อคอลัมน์ต่างกัน
pd.merge(df1, df2, left_on='Car', right_on='Vehicle')
# เพิ่ม indicator
pd.merge(df1, df2, on='Car', indicator=True)
# _merge column: 'both', 'left_only', 'right_only'