데이터 분석을 하다 보면 피벗 테이블을 사용하여 데이터를 요약해야 하는 경우가 많습니다. Pandas의 pivot_table()
함수는 이러한 작업을 매우 편리하게 해주는데요, 그 중에서도 aggfunc
옵션은 데이터를 어떻게 집계할지 결정하는 중요한 인자입니다. 이번 포스팅에서는 aggfunc
의 다양한 옵션인 sum
, mean
, max
, median
등을 사용하여 결과가 어떻게 달라지는지 살펴보겠습니다.
예제 데이터 생성
우선 예제 데이터를 만들어보겠습니다.
import pandas as pd
data = {
'Category': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'],
'Subcategory': ['X', 'X', 'Y', 'X', 'Y', 'X', 'X', 'Y'],
'Value': [10, 20, 20, 15, 25, 30, 40, 35]
}
df = pd.DataFrame(data)
print(df)
출력:
Category Subcategory Value
0 A X 10
1 A X 20
2 A Y 20
3 B X 15
4 B Y 25
5 C X 30
6 C X 40
7 C Y 35
이 데이터는 Category
, Subcategory
, 그리고 Value
로 이루어져 있습니다.
aggfunc='sum'
사용
aggfunc='sum'
은 각 그룹의 값을 합산합니다.
table_sum = pd.pivot_table(df, values='Value', index='Category', columns='Subcategory', aggfunc='sum')
print("aggfunc='sum' 결과:")
print(table_sum)
출력:
aggfunc='sum' 결과:
Subcategory X Y
Category
A 30.0 20.0
B 15.0 25.0
C 70.0 35.0
Category
'A'와Subcategory
'X'의 경우, 10 + 20 = 30이 됩니다.- 각 조합에 대한 합계를 계산합니다.
aggfunc='mean'
사용
aggfunc='mean'
은 각 그룹의 평균을 계산합니다.
table_mean = pd.pivot_table(df, values='Value', index='Category', columns='Subcategory', aggfunc='mean')
print("\naggfunc='mean' 결과:")
print(table_mean)
출력:
aggfunc='mean' 결과:
Subcategory X Y
Category
A 15.0 20.0
B 15.0 25.0
C 35.0 35.0
Category
'A'와Subcategory
'X'의 경우, (10 + 20) / 2 = 15가 됩니다.- 각 조합에 대한 평균을 계산합니다.
aggfunc='max'
사용
aggfunc='max'
는 각 그룹의 최댓값을 찾습니다.
table_max = pd.pivot_table(df, values='Value', index='Category', columns='Subcategory', aggfunc='max')
print("\naggfunc='max' 결과:")
print(table_max)
출력:
aggfunc='max' 결과:
Subcategory X Y
Category
A 20.0 20.0
B 15.0 25.0
C 40.0 35.0
Category
'A'와Subcategory
'X'의 경우, 10과 20 중 최댓값은 20입니다.- 각 조합에 대한 최댓값을 계산합니다.
aggfunc
는 이 외에도 다양한 함수를 지원합니다. 몇 가지를 더 살펴보겠습니다.
aggfunc='median'
사용
중앙값을 계산합니다.
table_median = pd.pivot_table(df, values='Value', index='Category', columns='Subcategory', aggfunc='median')
print("\naggfunc='median' 결과:")
print(table_median)
출력:
aggfunc='median' 결과:
Subcategory X Y
Category
A 15.0 20.0
B 15.0 25.0
C 35.0 35.0
Category
'C'와Subcategory
'X'의 경우, 30과 40의 중앙값은 35입니다.
aggfunc='min'
사용
최솟값을 찾습니다.
table_min = pd.pivot_table(df, values='Value', index='Category', columns='Subcategory', aggfunc='min')
print("\naggfunc='min' 결과:")
print(table_min)
출력:
aggfunc='min' 결과:
Subcategory X Y
Category
A 10.0 20.0
B 15.0 25.0
C 30.0 35.0
- 각 조합에 대한 최솟값을 계산합니다.
aggfunc='std'
사용
표준 편차를 계산합니다.
table_std = pd.pivot_table(df, values='Value', index='Category', columns='Subcategory', aggfunc='std')
print("\naggfunc='std' 결과:")
print(table_std)
출력:
aggfunc='std' 결과:
Subcategory X Y
Category
A 7.071068 NaN
B NaN NaN
C 7.071068 NaN
- 데이터 포인트가 두 개 이상인 경우에만 표준 편차를 계산합니다.
- 단일 값인 경우
NaN
이 나타납니다.
aggfunc='count'
사용
데이터 포인트의 개수를 셉니다.
table_count = pd.pivot_table(df, values='Value', index='Category', columns='Subcategory', aggfunc='count')
print("\naggfunc='count' 결과:")
print(table_count)
출력:
aggfunc='count' 결과:
Subcategory X Y
Category
A 2.0 1.0
B 1.0 1.0
C 2.0 1.0
- 각 조합에서 데이터 포인트의 수를 보여줍니다.
정리
- 합계(
sum
): 전체 값을 더한 합계. - 평균(
mean
): 값들의 평균. - 최댓값(
max
): 가장 큰 값. - 중앙값(
median
): 중앙에 위치한 값. - 최솟값(
min
): 가장 작은 값. - 표준 편차(
std
): 데이터 분포의 산포도. - 개수(
count
): 데이터 포인트의 수.
데이터 분석 목적에 따라 적절한 집계 함수를 선택하여 사용하시면 됩니다. 예를 들어, 매출 데이터를 분석한다면 sum
이나 mean
이 유용할 것이고, 데이터의 분포를 이해하려면 std
나 median
이 도움이 될 것입니다.