같은 값을 가지는 행들끼리 이어붙이기
2개의 표에서 같은 값을 가지는 행들끼리 이어붙이는 방법을 알아보겠습니다.
import pandas as pd
다음과 같은 데이터가 있습니다. purchase
는 고객번호(customer_id
)와 그 고객이 구매한 제품(product
), 2개의 컬럼으로 이뤄져 있습니다.
purchase = pd.DataFrame({
'customer_id': [0, 0, 1, 3],
'product': ['car', 'book', 'car', 'book']})
purchase
customer_id | product | |
---|---|---|
0 | 0 | car |
1 | 0 | book |
2 | 1 | car |
3 | 3 | book |
다음으로 customer
는 고객번호(customer_id
)와 고객의 주소(addr
)로 이뤄져 있습니다.
customer = pd.DataFrame({
'customer_id': [0, 2, 3],
'addr': ['North', 'West', 'South']})
customer
customer_id | addr | |
---|---|---|
0 | 0 | North |
1 | 2 | West |
2 | 3 | South |
이제 purchase
와 customer
에서 customer_id
가 같은 행을 찾아 이어붙여보겠습니다. 관계형 데이터베이스에서는 이를 조인(join)이라고 합니다.
pd.merge(purchase, customer)
customer_id | product | addr | |
---|---|---|---|
0 | 0 | car | North |
1 | 0 | book | North |
2 | 3 | book | South |
기본적으로 양쪽에서 이름이 같은 열을 기준으로 이어붙입니다. 기준이 될 열을 수동으로 지정할 수도 있습니다. left_on
은 왼쪽 표에서 기준이 될 열, right_on
은 오른쪽 표에서 기준이 될 열입니다.
pd.merge(purchase, customer, left_on='customer_id', right_on='customer_id')
customer_id | product | addr | |
---|---|---|---|
0 | 0 | car | North |
1 | 0 | book | North |
2 | 3 | book | South |
결과를 보면 양쪽 모두에 존재하는 0번과 3번 고객의 정보만 남은 것을 볼 수 있습니다. 이를 inner join이라고 합니다.
반대로 outer join은 다른 쪽에 없는 값은 NaN
으로 채웁니다. 여기서 NaN
은 비어있다는 뜻입니다.
pd.merge(purchase, customer, how='outer')
customer_id | product | addr | |
---|---|---|---|
0 | 0 | car | North |
1 | 0 | book | North |
2 | 1 | car | NaN |
3 | 3 | book | South |
4 | 2 | NaN | West |
left join은 왼쪽 표만 그대로 유지합니다. 오른쪽 표에만 존재하는 2번 고객은 포함하지 않습니다.
pd.merge(purchase, customer, how='left')
customer_id | product | addr | |
---|---|---|---|
0 | 0 | car | North |
1 | 0 | book | North |
2 | 1 | car | NaN |
3 | 3 | book | South |
right join은 반대로 오른쪽 표만 유지합니다. 왼쪽 표에만 존재하는 1번 고객은 포함하지 않습니다.
pd.merge(purchase, customer, how='right')
customer_id | product | addr | |
---|---|---|---|
0 | 0 | car | North |
1 | 0 | book | North |
2 | 3 | book | South |
3 | 2 | NaN | West |