English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Pandas 결합

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的索引(行标签)作为其连接键。如果DataFrame具有MultiIndex(分层),则级别数必须与右侧DataFrame中的连接键数匹配。 right_index − 相同的使用作为left_index为正确的数据帧。 how − “左”,“右”,“外”,“内”之一。默认为内部。每种方法已在下面描述。 sort − 排序的结果数据框中加入字典顺序按键。默认情况下为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':['sub12465']})
 right = pd.DataFrame(
    {'id': [1,2,3,4,5],
    'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
    'subject_id':['sub24365})
 print(left
 print(right)

실행 결과는 다음과 같습니다:

      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

한 키에서 두 데이터 프레임을 합병

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

실행 결과는 다음과 같습니다:

     Name  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

여러 키에서 두 데이터 프레임을 합병

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

실행 결과는 다음과 같습니다:

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

how 매개변수 사용 합병

합병의 how 매개변수는 결과 테이블에 포함될 키를 결정하는 방법을 지정합니다. 왼쪽이나 오른쪽 테이블에서 조합 키가 모두 없으면, 조인 테이블의 값은 NA입니다.

여기서는 어떻게 선택하고 그 SQL 대응 이름을 사용하는지 요약하겠습니다:

합병 방법SQL 대응설명
leftLEFT OUTER JOIN왼쪽 객체의 키 사용
rightRIGHT OUTER JOIN정확한 객체의 키 사용
outerFULL OUTER JOIN합병 키 사용
innerINNER JOIN키의 교집합 사용

왼쪽 조인

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

실행 결과는 다음과 같습니다:

      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':['sub12465']})
 right = pd.DataFrame({
    'id': [1,2,3,4,5],
    'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
    'subject_id':['sub24365']})
 print(pd.merge(left, right, on='subject_id', how='right'))

실행 결과는 다음과 같습니다:

      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':['sub12465']})
 right = pd.DataFrame({
    'id': [1,2,3,4,5],
    'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
    'subject_id':['sub24365']})
 print(pd.merge(left, right, how='outer', on='subject_id'))

실행 결과는 다음과 같습니다:

      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':['sub12465']})
 right = pd.DataFrame({
    'id': [1,2,3,4,5],
    'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
    'subject_id':['sub24365']})
 print(pd.merge(left, right, on='subject_id', how='inner'))

실행 결과는 다음과 같습니다:

      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