pd.merge๋ ๊ณตํต์ ์ด์ ๊ธฐ์ค์ผ๋ก ๋ ๋ฐ์ดํฐํ๋ ์์ ํฉ์ณ์ค๋ค.
import pandas as pd
# ๊ธฐ์ค์ด ์ด๋ฆ์ด ๊ฐ์ ๋
pd.merge(left, right, on = '๊ธฐ์ค์ด', how = '์กฐ์ธ๋ฐฉ์')
# ๊ธฐ์ค์ด ์ด๋ฆ์ด ๋ค๋ฅผ ๋
pd.merge(left, right, left_on = '์ผ์ชฝ ์ด', right_on = '์ค๋ฅธ์ชฝ ์ด', how = '์กฐ์ธ๋ฐฉ์')
left: ์ผ์ชฝ ๋ฐ์ดํฐ ํ๋ ์
right: ์ค๋ฅธ์ชฝ ๋ฐ์ดํฐ ํ๋ ์
on: (๋ ๋ฐ์ดํฐํ๋ ์์ ๊ธฐ์ค์ด ์ด๋ฆ์ด ๊ฐ์ ๋) ๊ธฐ์ค์ด
how: ์กฐ์ธ ๋ฐฉ์('left', 'right', 'inner', 'outer') ๊ธฐ๋ณธ๊ฐ์ 'inner'
left_on: ๊ธฐ์ค์ด ์ด๋ฆ์ด ๋ค๋ฅผ ๋, ์ผ์ชฝ ๊ธฐ์ค์ด
right_on: ๊ธฐ์ค์ด ์ด๋ฆ์ด ๋ค๋ฅผ ๋, ์ค๋ฅธ์ชฝ ๊ธฐ์ค์ด
์์
# ์์ ๋ฐ์ดํฐ ์์ฑ
students = pd.DataFrame({'Num':[4, 14, 7, 11, 10], 'students':['์ฑ์น์', '์ ๋๋ง', '์กํ์ญ', '์ํ์
', '๊ฐ๋ฐฑํธ']})
grade = pd.DataFrame({'Num':[14, 11, 12], 'Grade':['A', 'B', 'C']})

students๊ณผ grade๋ Num๋ฅผ ๊ณตํต์ ์ด๋ก ๊ฐ์ง๊ณ ์๋ค.
Num๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐํ๋ ์์ ๋ณํฉํด๋ณด์.
1. how = JOIN ๋ฐฉ์

Left Join: ์ผ์ชฝ ๋ฐ์ดํฐํ๋ ์์ ๊ธฐ์ค์ผ๋ก ํ๋ค. ์ค๋ฅธ์ชฝ ๋ฐ์ดํฐํ๋ ์์ ์๋ ๊ฐ์ NaN์ผ๋ก ๋ํ๋๋ค.
pd.merge(left, right, on = 'col', how = 'left')

Right Join: ์ค๋ฅธ์ชฝ ๋ฐ์ดํฐํ๋ ์์ ๊ธฐ์ค์ผ๋ก ์กฐ์ธํ๋ค. ์ผ์ชฝ ๋ฐ์ดํฐํ๋ ์์ ์๋ ๊ฐ์ NaN์ผ๋ก ๋ํ๋ธ๋ค.
pd.merge(left, right, on = 'col', how = 'right')

Inner Join: ๊ต์งํฉ์ ์๋ฏธํ๋ค. ์์ชฝ์ ๊ณตํต์ผ๋ก ์๋ ๊ฐ๋ง ๋ํ๋ธ๋ค.
pd.merge(left, right, on = 'col', how = 'inner')

Outer Join: ๋ชจ๋ ๊ฐ์ด ๋ํ๋๋๋ก ํ๋ค. ์ผ์ชฝ ๋ฐ์ดํฐํ๋ ์๊ณผ ์ค๋ฅธ์ชฝ ๋ฐ์ดํฐํ๋ ์์ ์๋ ๊ฐ๋ค์ NaN์ผ๋ก ๋ํ๋๋ค.
pd.merge(left, right, on = 'col', how = 'outer')

2. on = '๊ธฐ์ค์ด'
๊ณตํต์ด ๋๋ ๊ธฐ์ค ์ด์ด ์ฌ๋ฌ ๊ฐ์ผ ๋
pd.merge(left, right, on = ['col1', 'col2'])
๋ ๋ฐ์ดํฐํ๋ ์์ ์ด ์ด๋ฆ์ด ๋ค๋ฅผ ๋
์ ์์์ฒ๋ผ ์์ชฝ ๋ฐ์ดํฐํ๋ ์์์ merge์ ๊ธฐ์ค์ด ๋๋ ์ด์ ์ด๋ฆ์ด ๊ฐ๋ค๋ฉด on = '๊ธฐ์ค์ด'๋ก ์ง์ ํด์ฃผ๋ฉด ๋๋ค. ํ์ง๋ง ์์ชฝ ๋ฐ์ดํฐํ๋ ์์์ ๊ธฐ์ค์ด ๋๋ ์ด์ ์ด๋ฆ์ด ๋ค๋ฅด๋ค๋ฉด ๊ฐ๊ฐ left_on = '์ผ์ชฝ ์ด', right_on = '์ค๋ฅธ์ชฝ ์ด'๋ก ์ง์ ํ๋ฉด ๋๋ค.
pd.merge(left, right, left_on = '์ผ์ชฝ ์ด', right_on = '์ค๋ฅธ์ชฝ ์ด')
'Study > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [pandas] ์ค๋ณต ์ฒ๋ฆฌ(duplicated, drop_duplicates) (0) | 2023.06.14 |
|---|---|
| [pandas] .resample ์๊ณ์ด ์๋ฃ ์๊ฐ๊ฐ๊ฒฉ ๋ฆฌ์ํ๋งํ๊ธฐ (1) | 2023.06.13 |
| [python] read_csv๋ก ๋ฐ์ดํฐ ๋ถ๋ฌ์ฌ ์ parse_dates ์ต์ ์ผ๋ก datetime ํํ๋ก ์ง์ ํ๊ธฐ (0) | 2023.06.09 |
| [python] ์ธ๋ฑ์ค๋ฅผ ์ด๋ก ๋ณํ (reset_index) (0) | 2023.06.06 |
| [python] ๊ฒฐ์ธก๊ฐ ๋์ฒด/๋ณ๊ฒฝ (fillna) (0) | 2023.06.06 |