การรวมข้อมูลสอง DataFrame ด้วยความสัมพันธ์ One-to-Many** (หนึ่งต่อหลาย) สามารถทำได้โดยใช้ฟังก์ชัน pd.merge() พร้อมพารามิเตอร์ validate="one_to_many" (หรือ "1:m") ซึ่งจะตรวจสอบว่า key ในฝั่งซ้าย (left) ไม่มีค่าซ้ำ
ขั้นตอนการทำงาน
1. สร้าง DataFrame ทั้งสอง
import pandas as pd
# DataFrame 1: ข้อมูลรถและจำนวนยูนิต
dataFrame1 = pd.DataFrame({
"Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
"Units": [100, 150, 110, 80, 110, 90]
})
# DataFrame 2: ข้อมูลรถและราคาจดทะเบียน (มีรถบางคันซ้ำ/เพิ่ม)
dataFrame2 = pd.DataFrame({
"Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
"Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
})
2. Merge ด้วย validate="one_to_many"
mergedRes = pd.merge(dataFrame1, dataFrame2, validate="one_to_many")
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)
# Merge แบบ one-to-many
mergedRes = pd.merge(dataFrame1, dataFrame2, validate="one_to_many")
print("\nMerged dataframe (one-to-many):\n", mergedRes)
ผลลัพธ์
Merged dataframe (one-to-many):
Car Units Reg_Price
0 BMW 100 7000
1 Lexus 150 1500
2 Mustang 80 8000
3 Jaguar 90 6000
คำอธิบาย
- DataFrame1 มี Car ที่ไม่ซ้ำกัน (unique) → ผ่านการตรวจสอบ one-to-many
- DataFrame2 มี Car ซ้ำได้ (many) → ไม่มีปัญหา
- ผลลัพธ์มีเฉพาะรถที่มีใน ทั้งสอง DataFrame (inner join เป็นค่าเริ่มต้น)
- รถ Audi, Bentley (อยู่ใน df1 ไม่มีใน df2) และ Tesla, Mercedes (อยู่ใน df2 ไม่มีใน df1) ถูกลบออก
พารามิเตอร์ validate อื่นๆ
| ค่า | ความหมาย |
|---|---|
"one_to_one" / "1:1" | Key ไม่ซ้ำในทั้งสองฝั่ง |
"one_to_many" / "1:m" | Key ไม่ซ้ำในฝั่งซ้าย (left) |
"many_to_one" / "m:1" | Key ไม่ซ้ำในฝั่งขวา (right) |
"many_to_many" / "m:m" | Key ซ้ำได้ทั้งสองฝั่ง (ไม่ตรวจสอบ) |