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
'파이썬완전정복-Pandas DataFrame > 08. 결합' 카테고리의 다른 글
Pandas DataFrame 08-06. 업데이트 (update) (0) | 2022.01.23 |
---|---|
Pandas DataFrame 08-05. 객체 병합_결측제어 가능 (align) (0) | 2022.01.23 |
Pandas DataFrame 08-04. 객체병합 (merge) (0) | 2022.01.23 |
Pandas DataFrame 08-02. 다른 객체로 결측치 덮어쓰기 (combine_first) (0) | 2022.01.23 |
Pandas DataFrame 08-01. 함수를 이용한 열 단위 결합 (combine) (0) | 2022.01.22 |