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']})
|
key |
A |
B |
0 |
K0 |
A0 |
B0 |
1 |
K1 |
A1 |
B1 |
2 |
K3 |
A3 |
B3 |
|
key |
C |
D |
0 |
K0 |
C0 |
D0 |
1 |
K2 |
C2 |
D2 |
2 |
K3 |
C3 |
D3 |
|
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 두 명씩 있습니다.)