공통 열(Column)을 기준으로 두 개의 Pandas 데이터프레임을 병합하려면 merge() 함수를 사용하고, on 매개변수에 해당 열 이름을 지정하면 됩니다. 일치하지 않는 값에 대해 NaN을 설정하려면 how 매개변수를 left 또는 right로 지정합니다. 이는 왼쪽 또는 오른쪽 데이터프레임을 기준으로 병합한다는 의미입니다.
1단계: pandas 라이브러리 임포트
먼저 별칭(alias)을 사용하여 pandas 라이브러리를 임포트합니다.
import pandas as pd
2단계: 첫 번째 데이터프레임 생성
차량 정보를 담고 있는 DataFrame1을 생성합니다.
dataFrame1 = pd.DataFrame(
{
"Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
"Units": [100, 150, 110, 80, 110, 90]
}
)3단계: 두 번째 데이터프레임 생성
등록 가격 정보를 담고 있는 DataFrame2를 생성합니다.
dataFrame2 = pd.DataFrame(
{
"Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
"Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
}
)4단계: 공통 열 기준으로 데이터프레임 병합
이제 공통 열인 'Car'를 기준으로 두 데이터프레임을 병합합니다. how='left' 옵션을 사용하면 왼쪽 데이터프레임의 모든 행이 유지되며, 두 번째 데이터프레임에서 일치하지 않는 값에는 NaN이 설정됩니다.
mergedRes = pd.merge(dataFrame1, dataFrame2, on ='Car', how ="left")
참고로 how 매개변수에는 다음과 같은 옵션이 있습니다.
- left: 왼쪽 데이터프레임의 모든 행 유지
- right: 오른쪽 데이터프레임의 모든 행 유지
- inner: 양쪽에 모두 존재하는 행만 유지(기본값)
- outer: 양쪽의 모든 행 유지
전체 예제 코드
다음은 전체 코드입니다.
import pandas as pd
# DataFrame1 생성
dataFrame1 = pd.DataFrame(
{
"Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
"Units": [100, 150, 110, 80, 110, 90]
}
)
print("DataFrame1 ...\n", dataFrame1)
# DataFrame2 생성
dataFrame2 = pd.DataFrame(
{
"Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
"Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
}
)
print("\nDataFrame2 ...\n", dataFrame2)
# 공통 열 Car를 기준으로 병합하며, how="left"로 인해 일치하지 않는 값은 NaN으로 설정됨
mergedRes = pd.merge(dataFrame1, dataFrame2, on ='Car', how ="left")
print("\n공통 열 기준으로 병합된 데이터프레임...\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
공통 열 기준으로 병합된 데이터프레임...
Car Units Reg_Price
0 BMW 100 7000.0
1 Lexus 150 1500.0
2 Audi 110 NaN
3 Mustang 80 8000.0
4 Bentley 110 NaN
5 Jaguar 90 6000.0결과 분석
출력 결과를 보면, 왼쪽 데이터프레임(DataFrame1)의 모든 행이 그대로 유지된 것을 확인할 수 있습니다. 특히 Audi와 Bentley는 두 번째 데이터프레임(DataFrame2)에 존재하지 않으므로 해당 행의 Reg_Price 값이 NaN으로 표시됩니다. 반면 BMW, Lexus, Mustang, Jaguar는 양쪽 데이터프레임에 모두 존재하므로 정상적으로 병합되었습니다.