Computer >> Máy Tính >  >> Lập trình >> Python

Hợp nhất khung dữ liệu Python Pandas với một cột chung và đặt NaN cho các giá trị chưa khớp

Để hợp nhất hai Pandas DataFrame với cột chung, hãy sử dụng merge () chức năng và đặt BẬT tham số như tên cột. Để đặt NaN cho các giá trị chưa được so khớp, hãy sử dụng “ cách ”Và đặt nó ở bên trái hoặc đúng . Điều đó có nghĩa là hợp nhất trái hoặc phải.

Đầu tiên, hãy nhập thư viện gấu trúc với bí danh -

import pandas as pd

Hãy để chúng tôi tạo DataFrame1 -

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

Hãy để chúng tôi tạo DataFrame2 -

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

   }
)

Bây giờ, hợp nhất DataFrames với cột chung Xe. Bên trái "“ hiển thị tất cả các giá trị của DataFrame bên trái và đặt NaN cho các giá trị chưa khớp từ DataFrame thứ hai -

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

Ví dụ

Sau đây là mã -

import pandas as pd

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

print"DataFrame1 ...\n",dataFrame1

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

   }
)

print"\nDataFrame2 ...\n",dataFrame2

# merge DataFrames with common column Car and "left" sets NaN for unmatched values from second DataFrame
mergedRes = pd.merge(dataFrame1, dataFrame2, on ='Car', how ="left")
print"\nMerged data frame with common column...\n", mergedRes

Đầu ra

Sau đây là mã -

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