반응형
반응형

08-03. 인덱스기준 병합 (join)

DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)

 

개요


join 메서드는 두 객체를 인덱스 기준으로 병합하는 메서드 입니다.

 

사용법


self.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
other : self와 합칠 객체 입니다.
on : self의 열이나 인덱스 중에서 other의 어떤 열을 기준으로 결합할지 입니다.
즉, other의 (인덱스 기준이 아닌) 열 기준으로 결합할 때 on인수를 사용합니다.
how : {left : self기준 / right : other기준 / inner : 교집합 / outer : 합집합} 출력할 인덱스의 기준입니다.
lsuffix / rsffix : 이름이 중복되는 열이 있을 때 그 열에 추가로 붙일 접미사입니다.
lsuffix는 self의 열에 붙을 접미사고, rsuffix는 other의 열에 붙을 접미사입니다.
sort : 출력되는 데이터의 index를 사전적으로 정렬할지 여부입니다.

 

 

예시


기본 사용법
먼저 3개의 데이터를 만들겠습니다.

df1 : row1, row2, row3을 가지며 col1을 가짐
df2 : row3, row4를 가지며 col2를 가짐
df3 : row3, row4를 가지며 col1을 가짐, 즉 df1과 중복되는 열을 가짐

df1 = pd.DataFrame({'col1':[1,2,3]},index=['row3','row2','row1'])
print(df1)
>>
      col1
row3     1
row2     2
row1     3
df2 = pd.DataFrame({'col2':[13,14]},index=['row4','row3'])
print(df2)
>>
      col2
row4    13
row3    14
df3 = pd.DataFrame({'col1':[23,24]},index=['row4','row3'])
print(df3)
>>
      col1
row4    23
row3    24

how를 통한 인덱스의 설정
how인수를 통해 인덱스의 기준을 어떤 값으로 할지 정할 수 있습니다.
how=left인 경우 (기본값) df1의 인덱스를 기준으로 합니다.

print(df1.join(df2,how='left'))
>>
      col1  col2
row3     1  14.0
row2     2   NaN
row1     3   NaN

how=right인 경우 df2의 인덱스를 기준으로 합니다.

print(df1.join(df2,how='right'))
>>
      col1  col2
row4   NaN    13
row3   1.0    14

how=outer인 경우 df1와 df2의 인덱스의 합집합을 기준으로 합니다.

print(df1.join(df2,how='outer'))
>>
      col1  col2
row1   3.0   NaN
row2   2.0   NaN
row3   1.0  14.0
row4   NaN  13.0

how=inner인 경우 df1와 df2 인덱스의 교집합을 기준으로 합니다.

print(df1.join(df2,how='inner'))
>>
      col1  col2
row3     1    14


sort 인수를 통한 인덱스의 정렬
sort인수를 True로 설정할 경우 인덱스의 값을 사전적으로 정렬 할 수 있습니다.
sort가 False 인경우(기본값)

print(df1.join(df2,how='left'))
>>
      col1  col2
row3     1  14.0
row2     2   NaN
row1     3   NaN

sort가 True 인경우 인덱스가 정렬 된 것을 확인할 수 있습니다.

print(df1.join(df2,how='left',sort=True))
>>
      col1  col2
row1     3   NaN
row2     2   NaN
row3     1  14.0


lsuffix / rsuffix 인수를 통해 중복 열 구분하기
df1 df3은 col1이라는 이름이 중복된 열을 가지기 때문에, join메서드를 사용할 경우 오류가 발생하게 됩니다.
이때, lsuffix / rsuffix 인수를 입력함으로서 기존 열 이름에 접미사를 붙일 수 있습니다.

print(df1.join(df3,how='outer',lsuffix="_left",rsuffix='_right'))
>>
      col1_left  col1_right
row1        3.0         NaN
row2        2.0         NaN
row3        1.0        24.0
row4        NaN        23.0


인덱스가 아닌 열 기준으로 결합하기(+ on 인수의 사용) 먼저 IDX라는 이름의 열을 갖는 두 객체를 생성해보겠습니다.

df4 = pd.DataFrame({'IDX':['A','B','C'],'col1':[1,2,3]})
print(df4)
>>
  IDX  col1
0   A     1
1   B     2
2   C     3
df5 = pd.DataFrame({'IDX':['C','D'],'col2':[13,14]})
print(df5)
>>
  IDX  col2
0   C    13
1   D    14

join메서드는 기본적으로 index를 기준으로 결합하기 때문에, 열 기준으로 결합하기 위해서는
set_index메서드를 활용해 열을 인덱스로 변경하여 join메서드를 사용하면 됩니다.

print(df4.set_index('IDX').join(df5.set_index('IDX')))
>>
IDX            
A       1   NaN
B       2   NaN
C       3  13.0

하지만 위와 같이 진행 할 경우 기존 인덱스가 열 값으로 변경됩니다.
이를 방지하고 순수하게 열 기준으로 병합하려면 on 인수를 사용하면 됩니다.

print(df4.join(df5.set_index('IDX'),on='IDX'))
>>
  IDX  col1  col2
0   A     1   NaN
1   B     2   NaN
2   C     3  13.0
반응형

+ 최근 글