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

Python Pandas – DataFrame을 일대일(1:1) 관계로 병합하는 방법

Pandas에서 두 개의 DataFrame을 병합할 때는 merge() 함수를 사용합니다. 병합 과정에서 일대일(one-to-one) 관계임을 명시적으로 검증하려면 merge() 함수의 "validate" 매개변수에 아래 값 중 하나를 설정하면 됩니다.

validate = "one_to_one"
# 또는
validate = "1:1"

"validate" 옵션이 설정되면 병합 키가 왼쪽(left)과 오른쪽(right) 데이터셋 양쪽 모두에서 고유한지 확인합니다. 중복된 키가 발견되면 MergeError가 발생하므로, 병합 전에 데이터 무결성을 미리 보장할 수 있다는 장점이 있습니다.

1. 첫 번째 DataFrame 생성

먼저 차량명(Car)과 판매 대수(Units) 정보를 담은 첫 번째 DataFrame을 만들어 보겠습니다.

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

2. 두 번째 DataFrame 생성

이어서 차량명(Car)과 등록 가격(Reg_Price) 정보를 담은 두 번째 DataFrame을 생성합니다.

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

3. 전체 예제 코드

다음은 두 DataFrame을 일대일 관계로 병합하는 전체 코드입니다.

# Pandas DataFrame을 일대일(one-to-one) 관계로 병합

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_one"을 설정하여 병합
mergedRes = pd.merge(dataFrame1, dataFrame2, validate="one_to_one")
print("\n일대일 관계로 병합된 DataFrame ...\n", mergedRes)

4. 실행 결과

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

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
3  Mustang     80       8000
5   Jaguar     90       6000

결과 해석

공통 열인 Car를 병합 키로 사용하며, 결과에는 양쪽 데이터셋에 모두 존재하는 차량(BMW, Lexus, Mustang, Jaguar)만 포함됩니다. 각 차량이 양쪽에서 한 번씩만 나타나기 때문에 일대일 검증을 통과해 오류 없이 병합됩니다. 반대로 어느 한쪽에라도 중복 키가 존재하면 MergeError("Merge keys are not unique...")가 발생하므로, validate 옵션은 잘못된 조인 관계를 조기에 잡아내는 안전장치 역할을 합니다.