같은 값을 가지는 행들끼리 이어붙이기 :: Pandas 기초 - mindscale
Skip to content

같은 값을 가지는 행들끼리 이어붙이기

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

이제 purchasecustomer에서 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