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로 표시됩니다.