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

Gộp DataFrame Pandas với cột chung và đặt NaN cho giá trị không khớp

Để gộp hai DataFrame Pandas với cột chung, sử dụng hàm merge() và đặt tham số ON là tên cột. Để đặt NaN cho các giá trị không khớp, sử dụng tham số how và đặt là left hoặc right. Điều đó có nghĩa là gộp trái hoặc gộp phải.

Trước tiên, nhập thư viện pandas với bí danh:

import pandas as pd

Tạo DataFrame1:

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

Tạo DataFrame2:

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

Bây giờ, gộp DataFrames với cột chung Car. Tham số "left" hiển thị tất cả giá trị của DataFrame bên trái và đặt NaN cho các giá trị không khớp từ DataFrame thứ hai:

mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how="left")

Ví dụ hoàn chỉnh

Mã nguồn đầy đủ:

import pandas as pd
# Tạo DataFrame1
dataFrame1 = pd.DataFrame(
    {
        "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
        "Units": [100, 150, 110, 80, 110, 90]
    }
)
print("DataFrame1 ...\n", dataFrame1)
# Tạo DataFrame2
dataFrame2 = pd.DataFrame(
    {
        "Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
        "Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
    }
)
print("\nDataFrame2 ...\n", dataFrame2)
# gộp DataFrames với cột chung Car và "left" đặt NaN cho giá trị không khớp từ DataFrame thứ hai
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how="left")
print("\nDataFrame gộp với cột chung...\n", mergedRes)

Kết quả

Chương trình sẽ tạo ra kết quả sau:

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
Merged data frame with common column...
   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