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

Python Pandas - Gộp và tạo tích Descartes từ hai DataFrame

Để gộp DataFrame Pandas, sử dụng hàm merge(). Tích Descartes được thực hiện trên cả hai DataFrame bằng cách thiết lập trong tham số how của hàm merge() như sau:

how = "cross"

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', 'Mustang', 'Bentley', 'Jaguar'],
        "Units": [100, 150, 110, 120]
    }
)

Tạo DataFrame2:

dataFrame2 = pd.DataFrame(
    {
        "Car": ['BMW', 'Tesla', 'Jaguar'],
        "Reg_Price": [7000, 8000, 9000]
    }
)

Tiếp theo, gộp DataFrames với "cross" trong tham số "how" tức là Tích Descartes:

mergedRes = pd.merge(dataFrame1, dataFrame2, how="cross")

Ví dụ hoàn chỉnh

Mã nguồn đầy đủ:

import pandas as pd
# Tạo DataFrame1
dataFrame1 = pd.DataFrame(
    {
        "Car": ['BMW', 'Mustang', 'Bentley', 'Jaguar'],
        "Units": [100, 150, 110, 120]
    }
)
print("DataFrame1 ...\n", dataFrame1)
# Tạo DataFrame2
dataFrame2 = pd.DataFrame(
    {
        "Car": ['BMW', 'Tesla', 'Jaguar'],
        "Reg_Price": [7000, 8000, 9000]
    }
)
print("\nDataFrame2 ...\n", dataFrame2)
# gộp DataFrames với "cross" trong tham số "how" tức là Tích Descartes
mergedRes = pd.merge(dataFrame1, dataFrame2, how="cross")
print("\nDataFrame gộp với tích Descartes...\n", mergedRes)

Kết quả

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

DataFrame1 ...
   Car  Units
0  BMW    100
1 Mustang 150
2 Bentley 110
3 Jaguar  120
DataFrame2 ...
   Car  Reg_Price
0  BMW      7000
1 Tesla    8000
2 Jaguar   9000
Merged dataframe with cartesian product...
   Car  Units  Car_y  Reg_Price
0  BMW    100   BMW      7000
1  BMW    100   Tesla    8000
2  BMW    180   Jaguar   9000
3 Mustang 150   BMW      7000
4 Mustang 150   Tesla    8000
5 Mustang 150   Jaguar   9000
6 Bentley 110   BMW      7000
7 Bentley 110   Tesla    8000
8 Bentley 110   Jaguar   9000
9 Jaguar  120   BMW      7000
10 Jaguar 120   Tesla    8000
11 Jaguar 120   Jaguar   9000