merge를 이용해 DB에서처럼 조인(join)하기
left = pd.DataFrame({'key': ['K0', 'K1', 'K3'],
'A': ['A0', 'A1', 'A3'],
'B': ['B0', 'B1', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K2', 'K3'],
'C': ['C0', 'C2', 'C3'],
'D': ['D0', 'D2', 'D3']})
left
| key | A | B |
|---|
| 0 | K0 | A0 | B0 |
|---|
| 1 | K1 | A1 | B1 |
|---|
| 2 | K3 | A3 | B3 |
|---|
right
| key | C | D |
|---|
| 0 | K0 | C0 | D0 |
|---|
| 1 | K2 | C2 | D2 |
|---|
| 2 | K3 | C3 | D3 |
|---|
pd.merge(left, right)
| key | A | B | C | D |
|---|
| 0 | K0 | A0 | B0 | C0 | D0 |
|---|
| 1 | K3 | A3 | B3 | C3 | D3 |
|---|
pd.merge(left, right, on='key')
| key | A | B | C | D |
|---|
| 0 | K0 | A0 | B0 | C0 | D0 |
|---|
| 1 | K3 | A3 | B3 | C3 | D3 |
|---|
pd.merge(left, right, left_on='key', right_on='key')
| key | A | B | C | D |
|---|
| 0 | K0 | A0 | B0 | C0 | D0 |
|---|
| 1 | K3 | A3 | B3 | C3 | D3 |
|---|
pd.merge(left, right, how='inner')
| key | A | B | C | D |
|---|
| 0 | K0 | A0 | B0 | C0 | D0 |
|---|
| 1 | K3 | A3 | B3 | C3 | D3 |
|---|
pd.merge(left, right, how='outer')
| key | A | B | C | D |
|---|
| 0 | K0 | A0 | B0 | C0 | D0 |
|---|
| 1 | K1 | A1 | B1 | NaN | NaN |
|---|
| 2 | K3 | A3 | B3 | C3 | D3 |
|---|
| 3 | K2 | NaN | NaN | C2 | D2 |
|---|
pd.merge(left, right, how='left')
| key | A | B | C | D |
|---|
| 0 | K0 | A0 | B0 | C0 | D0 |
|---|
| 1 | K1 | A1 | B1 | NaN | NaN |
|---|
| 2 | K3 | A3 | B3 | C3 | D3 |
|---|
pd.merge(left, right, how='right')
| key | A | B | C | D |
|---|
| 0 | K0 | A0 | B0 | C0 | D0 |
|---|
| 1 | K3 | A3 | B3 | C3 | D3 |
|---|
| 2 | K2 | NaN | NaN | C2 | D2 |
|---|
실습
UFC 시합 데이터에서 선수 이름을 key로 이용하여 fighter.csv와 합쳐보세요. (주의: 한 시합에 선수는 R, B 두 명씩 있습니다.)