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

Merge DataFrames ด้วย Common Column ตั้งค่า NaN สำหรับค่าที่ไม่จับคู่

แนวคิด

ใช้ pd.merge(df1, df2, on='key', how='left') เพื่อเก็บแถวทั้งหมดจาก DataFrame ซ้าย (left) และดึงข้อมูลจากขวา (right) ที่ match ถ้าไม่ match ให้ NaN

ตัวอย่างโค้ด

import pandas as pd

df1 = pd.DataFrame({
    "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
    "Units": [100, 150, 110, 80, 110, 90]
})

df2 = pd.DataFrame({
    "Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
    "Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
})

print("DataFrame1 (Left):\n", df1)
print("\nDataFrame2 (Right):\n", df2)

# Left join: เก็บทุกแถว df1, match df2
merged = pd.merge(df1, df2, on='Car', how='left')
print("\nLeft Join Result:\n", merged)

ผลลัพธ์

DataFrame1 (Left):
       Car  Units
0      BMW    100
1    Lexus    150
2     Audi    110
3  Mustang     80
4  Bentley    110
5   Jaguar     90

DataFrame2 (Right):
       Car  Reg_Price
0      BMW       7000
1    Lexus       1500
2    Tesla       5000
3  Mustang       8000
4  Mercedes      9000
5   Jaguar       6000

Left Join Result:
       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

ความแตกต่าง Left vs Right vs Outer

  • Left: ทุกแถว df1, match df2 -> NaN ถ้าไม่มีใน df2
  • Right: ทุกแถว df2, match df1 -> NaN ถ้าไม่มีใน df1
  • Outer: ทุกแถวจากทั้งสอง, NaN ทั้งคู่ที่ไม่ match

ใช้ suffixes สำหรับคอลัมน์ชื่อซ้ำ

pd.merge(df1, df2, on='Car', how='left', suffixes=('_left', '_right'))