Python Pandas-병합 / 결합

Pandas는 SQL과 같은 관계형 데이터베이스와 관용적으로 매우 유사한 모든 기능을 갖춘 고성능 메모리 내 조인 작업을 제공합니다.

Pandas는 단일 기능을 제공합니다. merge, DataFrame 객체 사이의 모든 표준 데이터베이스 조인 작업의 진입 점으로-

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True)

여기에서는 다음 매개 변수를 사용했습니다.

  • left − DataFrame 객체.

  • right − 다른 DataFrame 개체.

  • on− 결합 할 열 (이름). 왼쪽 및 오른쪽 DataFrame 개체 모두에서 발견되어야합니다.

  • left_on− 키로 사용할 왼쪽 DataFrame의 열. 열 이름 또는 길이가 DataFrame의 길이와 같은 배열 일 수 있습니다.

  • right_on− 키로 사용할 오른쪽 DataFrame의 열. 열 이름 또는 길이가 DataFrame의 길이와 같은 배열 일 수 있습니다.

  • left_index − 만약 True,왼쪽 DataFrame의 인덱스 (행 레이블)를 조인 키로 사용합니다. MultiIndex (계층 구조)가있는 DataFrame의 경우 수준 수는 오른쪽 DataFrame의 조인 키 수와 일치해야합니다.

  • right_index − 동일한 사용법 left_index 올바른 DataFrame을 위해.

  • how− 'left', 'right', 'outer', 'inner'중 하나. 기본값은 내부입니다. 각 방법은 아래에 설명되어 있습니다.

  • sort− 사전 순으로 결합 키로 결과 DataFrame을 정렬합니다. 기본값은 True이고 False로 설정하면 대부분의 경우 성능이 크게 향상됩니다.

이제 두 개의 다른 DataFrame을 만들고 병합 작업을 수행하겠습니다.

# import the pandas library
import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame(
   {'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print left
print right

이것의 output 다음과 같습니다-

Name  id   subject_id
0   Alex   1         sub1
1    Amy   2         sub2
2  Allen   3         sub4
3  Alice   4         sub6
4  Ayoung  5         sub5

    Name  id   subject_id
0  Billy   1         sub2
1  Brian   2         sub4
2  Bran    3         sub3
3  Bryce   4         sub6
4  Betty   5         sub5

키에 두 개의 DataFrame 병합

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
	'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on='id')

이것의 output 다음과 같습니다-

Name_x   id  subject_id_x   Name_y   subject_id_y
0  Alex      1          sub1    Billy           sub2
1  Amy       2          sub2    Brian           sub4
2  Allen     3          sub4     Bran           sub3
3  Alice     4          sub6    Bryce           sub6
4  Ayoung    5          sub5    Betty           sub5

여러 키의 두 DataFrame 병합

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
	'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on=['id','subject_id'])

이것의 output 다음과 같습니다-

Name_x   id   subject_id   Name_y
0    Alice    4         sub6    Bryce
1   Ayoung    5         sub5    Betty

'how'인수를 사용하여 병합

그만큼 how병합 할 인수는 결과 테이블에 포함될 키를 결정하는 방법을 지정합니다. 키 조합이 왼쪽 또는 오른쪽 테이블에 나타나지 않으면 조인 된 테이블의 값은 NA가됩니다.

다음은 요약입니다. how 옵션 및 해당 SQL 등가 이름-

병합 방법 SQL 상당 기술
왼쪽 왼쪽 외부 조인 왼쪽 개체의 키 사용
권리 오른쪽 외부 조인 오른쪽 개체의 키 사용
밖의 전체 외부 조인 키 통합 사용
안의 내부 조인 키 교차 사용

왼쪽 조인

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='left')

이것의 output 다음과 같습니다-

Name_x   id_x   subject_id   Name_y   id_y
0     Alex      1         sub1      NaN    NaN
1      Amy      2         sub2    Billy    1.0
2    Allen      3         sub4    Brian    2.0
3    Alice      4         sub6    Bryce    4.0
4   Ayoung      5         sub5    Betty    5.0

오른쪽 조인

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='right')

이것의 output 다음과 같습니다-

Name_x  id_x   subject_id   Name_y   id_y
0      Amy   2.0         sub2    Billy      1
1    Allen   3.0         sub4    Brian      2
2    Alice   4.0         sub6    Bryce      4
3   Ayoung   5.0         sub5    Betty      5
4      NaN   NaN         sub3     Bran      3

외부 결합

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, how='outer', on='subject_id')

이것의 output 다음과 같습니다-

Name_x  id_x   subject_id   Name_y   id_y
0     Alex   1.0         sub1      NaN    NaN
1      Amy   2.0         sub2    Billy    1.0
2    Allen   3.0         sub4    Brian    2.0
3    Alice   4.0         sub6    Bryce    4.0
4   Ayoung   5.0         sub5    Betty    5.0
5      NaN   NaN         sub3     Bran    3.0

내부 조인

인덱스에서 조인이 수행됩니다. 조인 작업은 호출 된 개체를 따릅니다. 그래서,a.join(b) 같지 않다 b.join(a).

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='inner')

이것의 output 다음과 같습니다-

Name_x   id_x   subject_id   Name_y   id_y
0      Amy      2         sub2    Billy      1
1    Allen      3         sub4    Brian      2
2    Alice      4         sub6    Bryce      4
3   Ayoung      5         sub5    Betty      5