0️⃣ 데이터프레임 생성
- 먼저 테스트를 위한 데이터프레임을 생성하겠습니다.
import pandas as pd
import numpy as np
# 테스트 데이터프레임 생성
df = pd.DataFrame({
'container_id' : ['con_1', 'con_1', 'con_1', 'con_2', 'con_2', 'con_2', 'con_3', 'con_3', 'con_3'],
'product' : ['monitor', 'pc', 'cable', 'monitor', 'pc', 'cable', 'monitor', 'pc', 'cable'],
'made' : ['korea', 'korea', 'korea', 'korea', 'korea', 'korea', 'china', 'china', 'china'],
'amount' : [30, 10, 20, 40, 10, 50, 60, 0, 30]
})
1️⃣ 피벗테이블 생성 :: .pivot_table
- 데이터프레임으로도 엑셀처럼 피벗테이블을 만들 수 있습니다. pivot_table 메소드를 활용하면 되는데요,
각각 index, columns, values 가 될 칼럼 총 3개를 지정해주면 됩니다.
- values 값을 집계하는 방법은 아무것도 지정하지 않아도, 기본적으로 평균값(mean)으로 계산됩니다.
# 피벗테이블 만들기 (디폴트 평균값)
df.pivot_table(
index = 'made',
columns = 'product',
values = 'amount'
)
- 집계방식을 바꾸고 싶다면, aggfunc 파라미터를 추가해서 변경해주면 됩니다.
'count', 'min', 'max', 'sum' 등을 지정할 수 있습니다.
# 집계방식 합계로 바꾸기
df.pivot_table(
index = 'made', columns = 'product', values = 'amount',
aggfunc = 'sum'
)
2️⃣ 행열마다 총계 더하기
- 엑셀에서 피벗테이블을 만들면, 기본적으로 행열마다 총계가 붙어나오죠. 데이터프레임도 가능합니다.
파라미터 margins=True 를 추가하면 됩니다. 아래처럼 총계값들도 지정해둔 집계방식(합계, 평균 등)을 따라갑니다.
# 행열마다 합계 더하기 (Subtotal)
df.pivot_table(
index = 'made', columns = 'product', values = 'amount',
aggfunc = 'sum',
margins = True
)
# 행열마다 평균값 집계
df.pivot_table(
index = 'made', columns = 'product', values = 'amount',
aggfunc = 'mean',
margins = True
)
3️⃣ 집계값 여러개 한번에 보기
- 집계값을 여러개 보고 싶은 경우라면, 파라미터 aggfunc에 리스트를 넣어주면 됩니다. 여기에 총계를 더할 수도 있습니다.
# 여러개 집계해서 한번에 보기
df.pivot_table(
index = 'made', columns = 'product', values = 'amount',
aggfunc = ['count', 'sum', 'mean']
)
4️⃣ 인덱스 여러개 넣어서 피벗테이블 만들기
- 인덱스를 여러개 넣고 싶은 경우도 마찬가지입니다. index에 리스트를 넣으면 차례대로 멀티인덱싱이 됩니다.
# 인덱스 여러개
df.pivot_table(
index = ['made', 'container_id'],
columns = 'product',
values = 'amount'
)