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

Python Pandas – 다대일(many-to-one) 관계로 DataFrame 병합하는 방법

Pandas에서 두 개의 DataFrame을 병합하려면 merge() 함수를 사용합니다. 이때 다대일(many-to-one) 관계를 지정하려면 merge() 함수의 validate 매개변수에 다음 값 중 하나를 설정하면 됩니다.

validate = "many_to_one"
# 또는
validate = "m:1"

다대일 관계는 병합 키(merge key)가 오른쪽(right) 데이터셋에서 고유한지 검사합니다. 즉, 왼쪽 DataFrame의 키는 중복될 수 있지만 오른쪽 DataFrame의 키는 반드시 유니크해야 합니다. 조건이 충족되지 않으면 병합 시점에 오류가 발생하므로, 잘못된 병합으로 인한 데이터 왜곡을 사전에 방지할 수 있습니다.

첫 번째 DataFrame 생성

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

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

두 번째 DataFrame 생성

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

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

예제 코드

다음은 전체 예제 코드입니다.

#
# many-to-one 관계로 Pandas DataFrame 병합하기
#

import pandas as pd

# 첫 번째 DataFrame 생성
dataFrame1 = pd.DataFrame(
    {
        "Car": ['BMW', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
        "Units": [100, 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 매개변수에 "many_to_one"을 지정하여 병합
mergedRes = pd.merge(dataFrame1, dataFrame2, validate="many_to_one")
print("\nMerged dataframe with many-to-one relation...\n", mergedRes)

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

DataFrame1 ...
       Car   Units
0      BMW     100
1     Audi     110
2  Mustang      80
3  Bentley     110
4   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 dataframe with many-to-one relation...
      Car  Units  Reg_Price
0     BMW    100       7000
1 Mustang     80       8000
2  Jaguar    90       6000

결과 해석

두 DataFrame은 공통 열인 "Car"를 기준으로 기본 설정인 내부 조인(inner join) 방식으로 병합되었습니다. 그 결과 양쪽 모두에 존재하는 BMW, Mustang, Jaguar 세 개의 행만 최종 결과에 포함되었으며, 각 차량의 판매 대수(Units)와 등록 가격(Reg_Price) 정보가 하나의 표로 깔끔하게 합쳐진 것을 확인할 수 있습니다.