카테고리 없음

Pandas pivot_table()에서 aggfunc 사용법: `sum`, `mean`, `max`

temporubato108 2024. 10. 8. 16:07

데이터 분석을 하다 보면 피벗 테이블을 사용하여 데이터를 요약해야 하는 경우가 많습니다. 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이 유용할 것이고, 데이터의 분포를 이해하려면 stdmedian이 도움이 될 것입니다.