판다스의 join
Pandas Join
SQL Join 과 유사하다. pandas에서 merge, join 두 종류가 있지만, 파라미터 how 가 달라서 merge만 사용하는 것을 추천함.
Join_result = x.merge(y, on='key', how=?)
- how='inner'
- how='left'
- how='right'
- how='outer'
<merge의 파라미터>
DataFrame.merge(right, how='inner', on=None, left_on=None, left_index=False, right_index=False, sort=False, suffixes='_x','_y', copy=True, indicator=False, validate=None'
<join의 파라미터>
DataFrame.join(other, on=None, how='left', lsufiix='', sort=False
헷갈리지 않기위해 merge에서 how 파라미터는 inner, left, outer 만 사용하는 것을 권장
예제
import pandas as pd
d1 = {'customer_id':[1,2,3,4,5,6],
'product':['Oven','Oven','Oven','Television','Television','Television']
}
df1 = pd.DataFrame(d1)
d2 = {'customer_id':[2,4,6,8],
'state':['California','California','Texas', 'Hell']}
df2 = pd.DataFrame(d2)
df1
customer_id | product | |
---|---|---|
0 | 1 | Oven |
1 | 2 | Oven |
2 | 3 | Oven |
3 | 4 | Television |
4 | 5 | Television |
5 | 6 | Television |
df2
customer_id | state | |
---|---|---|
0 | 2 | California |
1 | 4 | California |
2 | 6 | Texas |
3 | 8 | Hell |
Inner Join 수행
둘이 중복되는 부분(교집합)만 추출된다.
inner_join_result = pd.merge(df1, df2, on='customer_id', how='inner')
inner_join_result
customer_id | product | state | |
---|---|---|---|
0 | 2 | Oven | California |
1 | 4 | Television | California |
2 | 6 | Television | Texas |
# 다른 방법
inner_join_result = df1.merge(df2, on='customer_id', how='inner')
inner_join_result
customer_id | product | state | |
---|---|---|---|
0 | 2 | Oven | California |
1 | 4 | Television | California |
2 | 6 | Television | Texas |
Left Outer Join 수행
df1 집합은 보존이 되고, 조인이 안되는 데이터는 NaN 으로 처리된다.
left_outer_join_result = df1.merge(df2, on='customer_id', how='left')
left_outer_join_result
customer_id | product | state | |
---|---|---|---|
0 | 1 | Oven | NaN |
1 | 2 | Oven | California |
2 | 3 | Oven | NaN |
3 | 4 | Television | California |
4 | 5 | Television | NaN |
5 | 6 | Television | Texas |
Right Outer Join 수행
df2 집합은 보존이 되고, 조인이 안되는 데이터는 NaN 으로 처리된다.
right_outer_join_result = df1.merge(df2, on='customer_id', how='right')
right_outer_join_result
customer_id | product | state | |
---|---|---|---|
0 | 2 | Oven | California |
1 | 4 | Television | California |
2 | 6 | Television | Texas |
3 | 8 | NaN | Hell |
# 다른 방법(Right Outer 대체 방법), 단 컬럼의 위치가 바뀐다.
left_outer_join_result_01 = df2.merge(df1, on='customer_id', how='left')
left_outer_join_result_01
customer_id | state | product | |
---|---|---|---|
0 | 2 | California | Oven |
1 | 4 | California | Television |
2 | 6 | Texas | Television |
3 | 8 | Hell | NaN |
Full Outer Join 수행
모든 집합이 보존되고, 조인이 안되는 데이터는 NaN 으로 처리된다.
full_outer_join_result = pd.merge(df1, df2, on='customer_id', how='outer')
full_outer_join_result
customer_id | product | state | |
---|---|---|---|
0 | 1 | Oven | NaN |
1 | 2 | Oven | California |
2 | 3 | Oven | NaN |
3 | 4 | Television | California |
4 | 5 | Television | NaN |
5 | 6 | Television | Texas |
6 | 8 | NaN | Hell |
Source: inflearn / 캐글 Advanced 머신러닝 실전 박치기
Author And Source
이 문제에 관하여(판다스의 join), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@fiifa92/판다스의-조인저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)