Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Pandas merge() 함수로 DataFrame을 일대다(1:m) 관계로 병합하는 방법

Pandas(판다스)에서 두 개의 DataFrame을 병합하려면 merge() 함수를 사용합니다. 이때 일대다(one-to-many) 관계로 병합하고 싶다면 merge() 함수의 "validate" 매개변수에 다음과 같이 값을 지정하면 됩니다.

validate = "one_to_many"
또는
validate = "1:m"

일대다 관계 옵션은 왼쪽(left) 데이터셋의 병합 키(merge keys)가 고유한 값인지 검증하는 역할을 합니다. 만약 이 조건이 충족되지 않으면 MergeError가 발생하여 잘못된 병합을 사전에 방지할 수 있으므로, 데이터 무결성을 확보하는 데 유용합니다.

먼저 첫 번째 DataFrame을 생성해 보겠습니다.

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

이어서 두 번째 DataFrame을 생성합니다.

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

예제 코드

위 내용을 바탕으로 작성한 전체 코드는 다음과 같습니다.

import pandas as pd

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

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

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

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

# "validate" 매개변수에 "one_to_many"를 지정하여 DataFrame 병합
mergedRes = pd.merge(dataFrame1, dataFrame2, validate="one_to_many")
print("\n일대다 관계로 병합된 DataFrame...\n", mergedRes)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

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
일대다 관계로 병합된 DataFrame...
       Car  Units  Reg_Price
0      BMW    100       7000
1    Lexus    150       1500
2  Mustang     80       8000
3   Jaguar     90       6000

결과 해설

병합 결과에는 BMW, Lexus, Mustang, Jaguar 네 개 행만 남아 있는 것을 확인할 수 있습니다. 이는 기본 병합 방식인 내부 조인(inner join)이 적용되었기 때문입니다. 즉, 두 DataFrame 모두에 존재하는 차량 키만 최종 결과에 포함되며, 한쪽에만 있는 Audi·Bentley(DataFrame1)와 Tesla·Mercedes(DataFrame2)는 제외됩니다. 만약 양쪽 데이터를 모두 유지하려면 how="outer" 옵션을 함께 사용하면 됩니다.