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 옵션은 잘못된 조인 관계를 조기에 잡아내는 안전장치 역할을 합니다.