logo

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

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

퀴즈

문제 1 / 4맞음: 0힌트: 0틀림: 0채점중: 0남음: 4

공통 키 값을 기준으로 두 데이터 프레임을 결합하는 함수는 무엇인가요?

  • pd.merge()
  • pd.concat()
  • pd.DataFrame()
  • pd.pivot_table()

퀴즈를 풀려면 대화형 기능을 불러와야 합니다.

Previous
데이터 합치기