판다스의 join

코드싸개·2021년 1월 3일
1

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 머신러닝 실전 박치기

profile
데이터 분석 공부용 벨로그

0개의 댓글