Pandas에서 두 개의 DataFrame을 하나로 합치려면 merge() 함수를 사용합니다. how 매개변수에 "inner" 값을 지정하면 두 DataFrame 사이에 내부 조인(Inner Join)이 수행됩니다.
내부 조인은 양쪽 DataFrame에 공통으로 존재하는 키 값만 결과에 포함하고, 한쪽에만 있는 행은 제외하는 병합 방식입니다. 이번 글에서는 두 DataFrame의 공통 열인 Car를 기준으로 내부 조인을 구현해 보겠습니다.
how = "inner"
구현 단계
1. pandas 라이브러리 불러오기
import pandas as pd
2. 첫 번째 DataFrame 만들기
차종(Car)과 판매 대수(Units) 정보를 담은 DataFrame입니다.
dataFrame1 = pd.DataFrame(
{
"Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
"Units": [100, 150, 110, 80, 110, 90]
}
)
3. 두 번째 DataFrame 만들기
차종(Car)과 등록 가격(Reg_Price) 정보를 담은 DataFrame입니다.
dataFrame2 = pd.DataFrame(
{
"Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
"Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
}
)
4. 내부 조인으로 병합하기
공통 열인 Car를 on 옵션으로 지정하고, how 옵션에 "inner"를 넣어 병합하면 내부 조인이 구현됩니다.
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how="inner")
전체 예제 코드
#
# Pandas DataFrame을 내부 조인(Inner Join)으로 병합하기
#
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를 기준으로 inner 조인 수행
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how="inner")
print("\nMerged dataframe with inner join...\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
Merged dataframe with inner join...
Car Units Reg_Price
0 BMW 100 7000
1 Lexus 150 1500
2 Mustang 80 8000
3 Jaguar 90 6000
결과 해설
첫 번째 DataFrame에는 Audi와 Bentley가, 두 번째 DataFrame에는 Tesla와 Mercedes가 각각 추가로 포함되어 있습니다. 하지만 내부 조인은 양쪽에 모두 존재하는 키만 결과에 남기므로, 최종 병합 결과에는 BMW, Lexus, Mustang, Jaguar 네 개 행만 포함됩니다.
참고로 how 옵션은 inner 외에도 left, right, outer 등의 값을 가질 수 있으며, 어떤 값을 선택하느냐에 따라 한쪽 DataFrame 전체를 유지하거나 모든 행을 합치는 등 병합 방식이 달라지므로 상황에 맞게 활용하시면 됩니다.