Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Pandas에서 공통 열을 기준으로 두 개의 DataFrame 병합하기 – merge() 함수 활용법

두 개의 Pandas DataFrame을 공통 열(컬럼)을 기준으로 병합하려면 merge() 함수를 사용하고, on 매개변수에 해당 열의 이름을 지정하면 됩니다. 이 방식은 SQL의 JOIN과 유사하게 동작하며, 기본적으로 양쪽 DataFrame에 모두 존재하는 값만 남기는 내부 조인(inner join)으로 처리됩니다.

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', 'Audi', 'Mustang', 'Mercedes', 'Jaguar'],
        'Reg_Price': [7000, 1500, 5000, 8000, 9000, 6000]
    }
)

4. 공통 열 'Car'를 기준으로 병합

이제 두 DataFrame이 공유하는 열인 'Car'를 기준으로 병합합니다.

mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car')

전체 예제 코드

다음은 위 과정 전체를 포함한 완성된 코드입니다.

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', 'Audi', 'Mustang', 'Mercedes', 'Jaguar'],
        'Reg_Price': [7000, 1500, 5000, 8000, 9000, 6000]
    }
)
print("\nDataFrame2 ...\n", dataFrame2)

# 공통 열 Car를 기준으로 DataFrame 병합
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car')
print("\nMerged data frame with common column...\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     Audi       5000
3  Mustang       8000
4 Mercedes       9000
5   Jaguar       6000

Merged data frame with common column...
       Car  Units  Reg_Price
0     BMW    100       7000
1   Lexus    150       1500
2    Audi    110       5000
3 Mustang     80       8000
4  Jaguar     90       6000

결과 해석

출력 결과를 보면 병합된 DataFrame에는 'Bentley'와 'Mercedes'가 포함되어 있지 않습니다. 그 이유는 merge() 함수가 기본적으로 내부 조인(inner join) 방식으로 동작하기 때문입니다. 즉, 두 DataFrame에 모두 존재하는 'Car' 값(BMW, Lexus, Audi, Mustang, Jaguar)만 최종 결과에 유지됩니다.

만약 한쪽에만 있는 데이터도 모두 포함하고 싶다면 how='outer', how='left', 또는 how='right' 옵션을 활용하면 됩니다. 예를 들어 pd.merge(dataFrame1, dataFrame2, on='Car', how='outer')로 설정하면 양쪽의 모든 차량이 병합되며, 매칭되지 않는 값은 NaN으로 표시됩니다.