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

Python Pandas - รวม (Merge) DataFrame แบบ One-to-Many Relation

การรวมข้อมูลสอง 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 ซ้ำได้ทั้งสองฝั่ง (ไม่ตรวจสอบ)