เมื่อต้องการรวมสอง DataFrame โดยใช้คอลัมน์ร่วม (common column) และต้องการเก็บข้อมูลฝั่งหนึ่งไว้ทั้งหมด ส่วนฝั่งอีกฝั่งที่ไม่มีค่าจับคู่ให้แสดงเป็น NaN ใช้พารามิเตอร์ how="left" (Left Join) หรือ how="right" (Right Join) ใน pd.merge()
ขั้นตอนการทำงาน
1. สร้าง DataFrame ทั้งสอง
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', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
"Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
})
2. Left Join (เก็บ df1 ทั้งหมด, df2 ที่ไม่จับคู่ = NaN)
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how='left')
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', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
"Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
})
print("\nDataFrame2:\n", dataFrame2)
# Left Join
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how='left')
print("\nMerged data frame (left join):\n", mergedRes)
ผลลัพธ์
Merged data frame (left join):
Car Units Reg_Price
0 BMW 100 7000.0
1 Lexus 150 1500.0
2 Audi 110 NaN
3 Mustang 80 8000.0
4 Bentley 110 NaN
5 Jaguar 90 6000.0
คำอธิบายประเภท Join
| how | ชื่อ | คำอธิบาย |
|---|---|---|
'left' | Left Join | เก็บแถวทั้งหมดของ DataFrame ซ้าย (df1), ขวาที่ไม่จับคู่ = NaN |
'right' | Right Join | เก็บแถวทั้งหมดของ DataFrame ขวา (df2), ซ้ายที่ไม่จับคู่ = NaN |
'outer' | Full Outer Join | เก็บทุกแถวจากทั้งสองฝั่ง, ไม่จับคู่ = NaN |
'inner' | Inner Join | เก็บเฉพาะแถวที่จับคู่ได้ทั้งคู่ (default) |
'cross' | Cross Join | Cartesian Product (ไม่ต้องระบุ on) |
การจัดการ NaN หลัง Merge
# เติม NaN ด้วยค่าที่ต้องการ
mergedRes['Reg_Price'] = mergedRes['Reg_Price'].fillna(0)
# หรือลบแถวที่มี NaN
mergedRes = mergedRes.dropna(subset=['Reg_Price'])