[Pandas] DataFrame 합치기(Merge)
- Python/Pandas
- 2021. 2. 10.
두개 이상의 DataFrame을 합치는 방법에 대해 알아보겠습니다.
판다스에서는 합치는 메소드로
merge(), join(), concat() 등이 있는데 이번 포스팅에서는 merge()에 대해서만 살펴보겠습니다.
DataFrame 두개를 먼저 임의로 만들겠습니다.
import pandas as pd
data1 = {'No':[1001,1002,1003,1005,1006],
'Name':['David','Terry','Tim','John','Max'],
'Department':['Management','Engineer','Engineer','Secretary','Delivery'],
'Entered Date':['2010-01-03','2000-05-20','2007-07-07','2019-03-13','2015-09-04']}
df_1 = pd.DataFrame(data1,columns=['No','Name','Department','Entered Date'])
df_1
data2 = {'No':[1011,1002,1003,1015,1006],
'Total_Experience':[11,21,14,2,6],
'Job position':['Manager','Director','Team leader','Staff','Assistant manager']}
df_2 = pd.DataFrame(data2)
df_2
두개의 DataFrame을 만들고 합쳐보겠습니다.
합치는 방법에 따라 병합된 DataFrame이 달라지게 됩니다.
합치는 방법은 크게 4가지입니다.
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- OUTER JOIN
INNER JOIN
그림으로 보면 교집합에 해당합니다.
그래서 두 데이터에 모두 있는 포함하는 값만 가져올 때 사용합니다.
어떤 column을 기준으로 할지 정해줘야 하는데요. 저는 No 를 기준으로 하겠습니다.
파라미터에 left_on='No',right_on='No', how= 'inner' 를 넣어줍니다.
df_inner = pd.merge(df_1,df_2,left_on = 'No',right_on='No',how='inner')
df_inner
No에서 중복되는 값만 가지고 오는 것을 볼 수 있습니다.
LEFT JOIN
LEFT JOIN은 왼쪽 column을 기준으로 합쳐지게 됩니다.
마찬가지로 파라미터에 left_on='No', right_on='No'을 작성하고 how='left'로 합니다.
df_left = pd.merge(df_1,df_2,left_on='No',right_on='No',how='left')
df_left
LEFT로 맞추었더지 df_1의 No를 기준으로 합쳐졌습니다.
df_2에 없는 값은 모두 NaN 처리가 되었습니다.
RIGHT JOIN
이번엔 오른쪽을 기준으로 해보겠습니다.
df_right = pd.merge(df_1,df_2,left_on='No',right_on='No',how='right')
df_right
df_2의 No 를 기준으로 합쳐졌습니다.
df_2에는 Name, Department, Entered Date 가 없으므로 모두 NaN처리가 되었습니다.
OUTER JOIN
이번엔 모두가 기준이 되는 경우입니다. 값이 중복되는것 상관없이 모두가 기준이 됩니다.
그래도 중복된 값들은 한번만 써집니다.
df_outer = pd.merge(df_1,df_2,left_on='No',right_on='No',how='outer')
df_outer
없는 값은 NaN으로 남기고 모두 합쳐지는 걸 볼 수 있습니다.
이렇게 4가지 방법으로 merge를 사용할 수 있습니다. 집합의 원리로 합쳐지니 금방 이해할 수 있을겁니다.
이상으로 포스팅을 마치겠습니다.
'Python > Pandas' 카테고리의 다른 글
[Pandas] 간단하게 수익률 구하기(pct_change) (0) | 2021.02.27 |
---|---|
[Pandas] DataFrame 시간 인덱스 나누기 (4) | 2021.02.13 |
[Pandas] 시간 데이터 처리 (0) | 2021.02.05 |
[Pandas]DataFrame 시간간격 재조정(Resampling) (0) | 2021.02.03 |
[Pandas] DataFrame 결측치(NaN) 처리 (0) | 2021.01.30 |