웹사이트 검색

Pandas merge() - 두 개의 DataFrame 객체 병합


Pandas DataFrame merge() 함수는 데이터베이스 스타일 조인 작업으로 두 개의 DataFrame 개체를 병합하는 데 사용됩니다. 조인은 열 또는 인덱스에서 수행됩니다. 조인이 열에서 수행되면 인덱스가 무시됩니다. 이 함수는 새 DataFrame을 반환하고 소스 DataFrame 개체는 변경되지 않습니다.

Pandas DataFrame merge() 함수 구문

merge() 함수 구문은 다음과 같습니다.

def merge(
    self,
    right,
    how="inner",
    on=None,
    left_on=None,
    right_on=None,
    left_index=False,
    right_index=False,
    sort=False,
    suffixes=("_x", "_y"),
    copy=True,
    indicator=False,
    validate=None,
)

  • 오른쪽: 소스 DataFrame과 병합할 다른 DataFrame.
  • 방법: {'left', 'right', 'outer', 'inner'}, 기본 'inner'. 병합 작업 유형을 정의하는 가장 중요한 매개변수입니다. 이들은 SQL 왼쪽 외부 조인, 오른쪽 외부 조인, 전체 외부 조인 및 내부 조인과 유사합니다.
  • on: 조인할 열 또는 인덱스 수준 이름입니다. 이러한 열은 두 DataFrame 모두에 있어야 합니다. 제공되지 않으면 두 DataFrames의 열 교차점이 사용됩니다.
  • left_on: 왼쪽 DataFrame에서 조인할 열 또는 인덱스 수준 이름입니다.
  • right_on: 오른쪽 DataFrame에서 조인할 열 또는 인덱스 수준 이름입니다.
  • left_index: 왼쪽 DataFrame의 인덱스를 조인 키로 사용합니다.
  • right_index: 오른쪽 DataFrame의 인덱스를 조인 키로 사용합니다.
  • 정렬: 결과 DataFrame에서 조인 키를 사전순으로 정렬합니다.
  • suffixes: 왼쪽과 오른쪽에 각각 겹치는 열 이름에 적용할 접미사.
  • 표시기: True인 경우 각 행의 소스에 대한 정보와 함께 "_merge”라는 출력 DataFrame에 열을 추가합니다.
  • validate: 병합 프로세스의 유효성을 검사하는 데 사용됩니다. 유효한 값은 {"일대일\ 또는 "1:1\, "일대다\ 또는 "1:m\, "다대일\ 또는 "m:1\, "다대다\ 또는 "m입니다. m”}.

Pandas DataFrame merge() 예제

두 개의 DataFrame 개체를 병합하는 몇 가지 예를 살펴보겠습니다.

1. 기본 병합 - 내부 조인

import pandas as pd

d1 = {'Name': ['Pankaj', 'Meghna', 'Lisa'], 'Country': ['India', 'India', 'USA'], 'Role': ['CEO', 'CTO', 'CTO']}

df1 = pd.DataFrame(d1)

print('DataFrame 1:\n', df1)

df2 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Pankaj', 'Anupam', 'Amit']})
print('DataFrame 2:\n', df2)

df_merged = df1.merge(df2)
print('Result:\n', df_merged)

산출:

DataFrame 1:
      Name Country Role
0  Pankaj   India  CEO
1  Meghna   India  CTO
2    Lisa     USA  CTO
DataFrame 2:
    ID    Name
0   1  Pankaj
1   2  Anupam
2   3    Amit
Result:
      Name Country Role  ID
0  Pankaj   India  CEO   1

2. Left, Right 및 Outer Join을 사용하여 DataFrame 병합

print('Result Left Join:\n', df1.merge(df2, how='left'))
print('Result Right Join:\n', df1.merge(df2, how='right'))
print('Result Outer Join:\n', df1.merge(df2, how='outer'))

산출:

Result Left Join:
      Name Country Role   ID
0  Pankaj   India  CEO  1.0
1  Meghna   India  CTO  NaN
2    Lisa     USA  CTO  NaN
Result Right Join:
      Name Country Role  ID
0  Pankaj   India  CEO   1
1  Anupam     NaN  NaN   2
2    Amit     NaN  NaN   3
Result Outer Join:
      Name Country Role   ID
0  Pankaj   India  CEO  1.0
1  Meghna   India  CTO  NaN
2    Lisa     USA  CTO  NaN
3  Anupam     NaN  NaN  2.0
4    Amit     NaN  NaN  3.0

3. 특정 열에 DataFrame 병합

import pandas as pd

d1 = {'Name': ['Pankaj', 'Meghna', 'Lisa'], 'ID': [1, 2, 3], 'Country': ['India', 'India', 'USA'],
      'Role': ['CEO', 'CTO', 'CTO']}
df1 = pd.DataFrame(d1)

df2 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Pankaj', 'Anupam', 'Amit']})

print(df1.merge(df2, on='ID'))
print(df1.merge(df2, on='Name'))

산출:

   Name_x  ID Country Role  Name_y
0  Pankaj   1   India  CEO  Pankaj
1  Meghna   2   India  CTO  Anupam
2    Lisa   3     USA  CTO    Amit

     Name  ID_x Country Role  ID_y
0  Pankaj     1   India  CEO     1

4. DataFrame 개체 병합을 위한 왼쪽 및 오른쪽 열 지정

import pandas as pd

d1 = {'Name': ['Pankaj', 'Meghna', 'Lisa'], 'ID1': [1, 2, 3], 'Country': ['India', 'India', 'USA'],
      'Role': ['CEO', 'CTO', 'CTO']}
df1 = pd.DataFrame(d1)

df2 = pd.DataFrame({'ID2': [1, 2, 3], 'Name': ['Pankaj', 'Anupam', 'Amit']})

print(df1.merge(df2))

print(df1.merge(df2, left_on='ID1', right_on='ID2'))

산출;

     Name  ID1 Country Role  ID2
0  Pankaj    1   India  CEO    1

   Name_x  ID1 Country Role  ID2  Name_y
0  Pankaj    1   India  CEO    1  Pankaj
1  Meghna    2   India  CTO    2  Anupam
2    Lisa    3     USA  CTO    3    Amit

5. 데이터 프레임 병합을 위한 조인 키로 인덱스 사용

import pandas as pd

d1 = {'Name': ['Pankaj', 'Meghna', 'Lisa'], 'Country': ['India', 'India', 'USA'], 'Role': ['CEO', 'CTO', 'CTO']}
df1 = pd.DataFrame(d1)

df2 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Pankaj', 'Anupam', 'Amit']})

df_merged = df1.merge(df2)
print('Result Default Merge:\n', df_merged)

df_merged = df1.merge(df2, left_index=True, right_index=True)
print('\nResult Index Merge:\n', df_merged)

산출:

Result Default Merge:
      Name Country Role  ID
0  Pankaj   India  CEO   1

Result Index Merge:
    Name_x Country Role  ID  Name_y
0  Pankaj   India  CEO   1  Pankaj
1  Meghna   India  CTO   2  Anupam
2    Lisa     USA  CTO   3    Amit

참조

  • Python Pandas 모듈 자습서
  • DataFrame merge() API 문서