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

Pandas DataFrame을 내부 조인(Inner Join)으로 병합하는 방법

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 전체를 유지하거나 모든 행을 합치는 등 병합 방식이 달라지므로 상황에 맞게 활용하시면 됩니다.