Pandas에서 여러 개의 DataFrame을 하나로 합치려면 merge() 함수를 사용하면 됩니다. 이 중 오른쪽 외부 조인(Right Outer Join)은 merge() 함수의 how 매개변수에 아래 값을 설정하여 구현합니다.
how = 'right'
오른쪽 외부 조인은 오른쪽(두 번째) DataFrame의 모든 행을 그대로 유지하면서 병합하며, 왼쪽 DataFrame에 일치하는 키가 존재하지 않는 경우 해당 값은 NaN(결측치)으로 채워집니다.
먼저 pandas 라이브러리를 별칭(alias)과 함께 임포트합니다.
import pandas as pd
병합에 사용할 두 개의 DataFrame을 생성합니다.
# 첫 번째 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]
}
)
공통 열인 'Car'를 기준으로 두 DataFrame을 병합하되, how 매개변수에 'right'를 지정하면 오른쪽 외부 조인이 수행됩니다.
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how='right')
전체 예제 코드
다음은 위 과정을 모두 포함한 전체 예제입니다.
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)
# 공통 열 Car를 기준으로 병합하며, how='right'로 오른쪽 외부 조인 수행
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how='right')
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.0 7000
1 Lexus 150.0 1500
2 Mustang 80.0 8000
3 Jaguar 90.0 6000
4 Tesla NaN 5000
5 Mercedes NaN 9000
결과 해석
병합 결과를 살펴보면 오른쪽 DataFrame(dataFrame2)에 있는 모든 차종(BMW, Lexus, Tesla, Mustang, Mercedes, Jaguar)이 그대로 유지된 것을 확인할 수 있습니다. 반면 왼쪽 DataFrame(dataFrame1)에는 Tesla와 Mercedes가 존재하지 않기 때문에, 이 두 행의 Units 값은 NaN으로 표시됩니다. 이처럼 오른쪽 DataFrame의 데이터를 모두 보존하면서 일치하지 않는 왼쪽 값을 결측치로 처리하는 것이 오른쪽 외부 조인의 핵심 동작 방식입니다.