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

Python Pandas – merge() 함수로 두 DataFrame 간의 공통 행 찾기

두 개의 DataFrame에서 공통된 행을 찾으려면 Pandas의 merge() 함수를 사용하면 됩니다. 이때 how 매개변수를 'inner'로 지정하는데, 이는 SQL의 INNER JOIN과 동일한 방식으로 작동하기 때문입니다. inner 조인은 양쪽 DataFrame에 모두 존재하는 행만 결과로 남깁니다.

1. DataFrame 생성하기

먼저 두 개의 컬럼('Car', 'Reg_Price')을 가진 첫 번째 DataFrame을 만들어 보겠습니다.

dataFrame1 = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Audi', 'Tesla', 'Bentley', 'Jaguar'],
      "Reg_Price": [1000, 1500, 1100, 800, 1100, 900]
   }
)

이번에는 같은 구조의 두 번째 DataFrame을 생성합니다. 자동차 목록은 동일하지만 일부 차량의 등록 가격(Reg_Price)이 다르다는 점에 주목하세요.

dataFrame2 = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Audi', 'Tesla', 'Bentley', 'Jaguar'],
      "Reg_Price": [1200, 1500, 1000, 800, 1100, 1000]
   }
)

2. merge()로 공통 행 찾기

두 DataFrame에 공통으로 존재하는 행을 구하는 코드는 아래와 같습니다. how='inner' 옵션이 핵심 역할을 하며, indicator=False는 병합 출처를 표시하는 추가 컬럼을 생성하지 않도록 지정하는 것입니다.

dataFrame1.merge(dataFrame2, how='inner', indicator=False)

두 DataFrame은 이름이 같은 컬럼('Car', 'Reg_Price')을 기준으로 자동으로 병합되며, 모든 컬럼의 값이 완전히 일치하는 행만 최종 결과에 포함됩니다.

3. 전체 예제 코드

지금까지의 내용을 하나로 합친 전체 코드는 다음과 같습니다.

import pandas as pd

# 첫 번째 DataFrame 생성
dataFrame1 = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Audi', 'Tesla', 'Bentley', 'Jaguar'],
      "Reg_Price": [1000, 1500, 1100, 800, 1100, 900]
   }
)
print("DataFrame1 ...\n", dataFrame1)

# 두 번째 DataFrame 생성
dataFrame2 = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Audi', 'Tesla', 'Bentley', 'Jaguar'],
      "Reg_Price": [1200, 1500, 1000, 800, 1100, 1000]
   }
)
print("\nDataFrame2 ...\n", dataFrame2)

# 두 DataFrame 간의 공통 행 찾기
resData = dataFrame1.merge(dataFrame2, how='inner', indicator=False)
print("\nCommon rows between two DataFrames...\n", resData)

4. 실행 결과

위 코드를 실행하면 다음과 같은 출력이 나타납니다.

DataFrame1 ...
        Car  Reg_Price
0       BMW       1000
1     Lexus       1500
2      Audi       1100
3     Tesla        800
4   Bentley       1100
5    Jaguar        900

DataFrame2 ...
        Car  Reg_Price
0       BMW       1200
1     Lexus       1500
2      Audi       1000
3     Tesla        800
4   Bentley       1100
5    Jaguar       1000

Common rows between two DataFrames...
        Car  Reg_Price
0     Lexus       1500
1     Tesla        800
2   Bentley       1100

결과 분석

실행 결과를 보면 BMW(1000 → 1200), Audi(1100 → 1000), Jaguar(900 → 1000)는 두 DataFrame 사이에 등록 가격이 달라서 공통 행에서 제외되었습니다. 반면 Lexus(1500), Tesla(800), Bentley(1100)는 모든 컬럼의 값이 양쪽에서 동일하기 때문에 최종 결과에 포함된 것을 확인할 수 있습니다.

이처럼 merge()와 how='inner' 조합을 활용하면 SQL의 INNER JOIN처럼 두 DataFrame 사이에서 완전히 일치하는 행만 손쉽게 추출할 수 있습니다.