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

Python Pandas - indicator 옵션으로 DataFrame 병합하기

Pandas에서 두 개의 DataFrame을 병합(merge)하려면 merge() 함수를 사용합니다. 이 함수는 다양한 매개변수를 지원하는데, 그중 indicator 매개변수를 True 또는 False로 설정할 수 있습니다.

특정 레코드가 어느 DataFrame에 속해 있는지 확인하고 싶다면 아래와 같이 indicator를 True로 지정합니다.

indicator = True

이 매개변수를 True로 설정하면 병합된 결과 DataFrame에 _merge라는 이름의 열이 자동으로 추가됩니다. 이 열에는 각 레코드가 양쪽 DataFrame에 모두 존재하는지(both), 왼쪽에만 있는지(left_only), 오른쪽에만 있는지(right_only) 표시됩니다.

먼저 pandas 라이브러리를 별칭(alias)과 함께 불러옵니다.

import pandas as pd

첫 번째 DataFrame을 생성합니다.

dataFrame1 = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
      "Units": [100, 150, 110, 80, 110, 90]
   }
)

두 번째 DataFrame을 생성합니다.

dataFrame2 = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
      "Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
   }
)

이제 indicator 값을 True로 설정하여 두 DataFrame을 병합합니다. 여기서는 how="left" 옵션을 사용해 왼쪽 DataFrame의 모든 행을 기준으로 병합했습니다.

# indicator 값을 사용하여 DataFrame 병합
mergedRes = pd.merge(dataFrame1, dataFrame2, how="left", indicator=True)

전체 예제 코드

다음은 위 과정을 하나로 정리한 전체 코드입니다.

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)

# indicator 값을 사용하여 DataFrame 병합
mergedRes = pd.merge(dataFrame1, dataFrame2, how="left", indicator=True)
print("\nMerged dataframe...\n", mergedRes)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다. 결과의 _merge 열에서 값이 "both"인 레코드는 두 DataFrame에 모두 존재하는 데이터이며, "left_only"는 왼쪽 DataFrame에만 존재하는 레코드임을 의미합니다.

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...
        Car   Units   Reg_Price    _merge
0       BMW     100      7000.0       both
1      Lexus     150      1500.0       both
2       Audi     110         NaN  left_only
3    Mustang      80      8000.0       both
4    Bentley     110         NaN  left_only
5     Jaguar      90      6000.0       both

실행 결과를 보면 Audi와 Bentley는 두 번째 DataFrame에 등록 정보(Reg_Price)가 없어 NaN으로 표시되며, _merge 열에는 left_only가 기록된 것을 확인할 수 있습니다. 반면 BMW, Lexus, Mustang, Jaguar는 두 DataFrame에 모두 존재하므로 both로 표시됩니다.