Pandas 기초

파이썬에서 표 형태의 데이터를 탐색하고 분석하는데 사용하는 판다스 라이브러리 사용법을 알아봅니다.


수강중

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

동영상이 없는 텍스트 강의 자료입니다.

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