Pandas에서 두 개의 DataFrame을 공통 열을 기준으로 병합하려면 merge() 함수를 사용하고, on 매개변수에 병합 기준이 될 열 이름을 지정하면 됩니다.
또한 한쪽 DataFrame에만 존재하는 일치하지 않는 값에 대해 NaN을 설정하려면 how 매개변수를 left 또는 right로 지정해야 합니다. 이는 각각 왼쪽 DataFrame 또는 오른쪽 DataFrame의 모든 행을 유지하면서 병합한다는 의미입니다.
1. Pandas 라이브러리 불러오기
먼저 pandas 라이브러리를 별칭(alias)과 함께 가져옵니다.
import pandas as pd
2. 첫 번째 DataFrame 생성
차량 정보와 판매 수량을 담은 첫 번째 DataFrame을 만듭니다.
dataFrame1 = pd.DataFrame(
{
"Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
"Units": [100, 150, 110, 80, 110, 90]
}
)3. 두 번째 DataFrame 생성
차량 정보와 등록 가격을 담은 두 번째 DataFrame을 만듭니다.
dataFrame2 = pd.DataFrame(
{
"Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
"Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
}
)4. 공통 열 'Car'를 기준으로 병합
두 DataFrame의 공통 열인 'Car'를 기준으로 병합합니다. how="left"로 설정하면 왼쪽 DataFrame(dataFrame1)의 모든 행이 유지되며, 두 번째 DataFrame에 존재하지 않는 차량(Audi, Bentley)의 Reg_Price 값은 NaN으로 표시됩니다.
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how="left")
전체 예제 코드
다음은 위 과정을 모두 포함한 전체 코드입니다.
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를 기준으로 병합, "left"는 두 번째 DataFrame에서
# 일치하지 않는 값에 대해 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참고: how 매개변수의 주요 옵션
how 매개변수에는 다음과 같은 옵션이 있으며, 상황에 따라 적절히 선택하여 사용할 수 있습니다.
- left: 왼쪽 DataFrame의 모든 행을 유지하고, 오른쪽에 일치하지 않는 값은 NaN으로 설정
- right: 오른쪽 DataFrame의 모든 행을 유지하고, 왼쪽에 일치하지 않는 값은 NaN으로 설정
- outer: 양쪽 DataFrame의 모든 행을 유지하며, 일치하지 않는 값은 NaN으로 설정
- inner(기본값): 양쪽에 모두 존재하는 행만 병합하며, 일치하지 않는 행은 제외됨
이처럼 merge() 함수의 on과 how 매개변수를 조합하면 공통 열을 기준으로 유연하게 데이터프레임을 병합할 수 있습니다.