Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Hợp nhất DataFrame Pandas cột chung, NaN cho giá trị không khớp (Left Join)

Để hợp nhất hai DataFrame với cột chung, dùng merge() với tham số on là tên cột. Để đặt NaN cho giá trị không khớp từ DataFrame thứ 2, dùng how="left" (left join).

Ví dụ

import pandas as pd

# DataFrame1 (bên trái)
dataFrame1 = pd.DataFrame({
    "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
    "Units": [100, 150, 110, 80, 110, 90]
})

# DataFrame2 (bên phải)
dataFrame2 = pd.DataFrame({
    "Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
    "Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
})

print("DataFrame1 ...\n", dataFrame1)
print("\nDataFrame2 ...\n", dataFrame2)

# Left join: giữ tất cả df1, NaN cho df2 không khớp
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how="left")
print("\nKết quả Left Join:\n", mergedRes)

Kết quả đầu ra

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

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

Kết quả 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

Giải thích

  • Left join: giữ tất cả hàng của DataFrame trái (df1).
  • Ghép cột từ df2 khi khớp "Car".
  • Không khớp (Audi, Bentley) → Reg_Price = NaN.
  • Tesla, Mercedes (chỉ ở df2) → bị loại.

Các loại join:

  • how="inner": chỉ hàng khớp cả hai.
  • how="left": tất cả df1 + khớp df2.
  • how="right": tất cả df2 + khớp df1.
  • how="outer": tất cả cả hai (union).
  • how="cross": tích Descartes (mỗi hàng df1 với mỗi hàng df2).