본문 바로가기
자격증공부/빅데이터분석기사 실기

[Pandas] pivot_table 완벽 가이드

by non-non 2025. 6. 17.

1. 개요

pandas.pivot_table은 엑셀의 피벗 테이블과 같은 기능을 제공하는 강력한 데이터 분석 도구입니다. 복잡한 데이터를 쉽게 요약하고 분석할 수 있도록 도와주며, 스프레드시트 스타일의 피벗 테이블을 DataFrame 형태로 생성합니다.

 

2. 기본 문법

 
pandas.pivot_table(data, values=None, index=None, columns=None, 
                   aggfunc='mean', fill_value=None, margins=False, 
                   dropna=True, margins_name='All', observed=<no_default>, 
                   sort=True)

 

3. 매개변수 상세 설명

[필수 매개변수]

data (DataFrame)

  • 피벗 테이블을 생성할 원본 데이터프레임입니다.

[선택적 매개변수]

values (list-like 또는 scalar, 선택사항)

  • 집계할 열을 지정합니다.
  • 여러 열을 지정할 수 있으며, 이 경우 각 열에 대해 집계 함수가 적용됩니다.

index (column, Grouper, array, 또는 이들의 리스트)

  • 피벗 테이블의 인덱스(행)로 사용할 그룹화 기준입니다.
  • 여러 열을 지정하면 계층적 인덱스(MultiIndex)가 생성됩니다.

columns (column, Grouper, array, 또는 이들의 리스트)

  • 피벗 테이블의 컬럼으로 사용할 그룹화 기준입니다.
  • 여러 열을 지정하면 계층적 컬럼이 생성됩니다.

aggfunc (함수, 함수 리스트, 또는 딕셔너리, 기본값: 'mean')

  • 집계에 사용할 함수를 지정합니다.
  • 사용 가능한 함수: 'mean', 'sum', 'count', 'min', 'max', 'std' 등
  • 여러 함수를 리스트로 전달하면 계층적 컬럼이 생성됩니다.
  • 딕셔너리로 전달하면 열별로 다른 집계 함수를 적용할 수 있습니다.

fill_value (scalar, 기본값: None)

  • 결측값(NaN)을 대체할 값을 지정합니다.
  • 집계 후 빈 셀에 표시될 값입니다.

margins (bool, 기본값: False)

  • True로 설정하면 행과 열의 부분 집계를 포함한 'All' 행과 열이 추가됩니다.
  • 전체 합계나 평균을 확인할 때 유용합니다.

dropna (bool, 기본값: True)

  • 모든 항목이 NaN인 컬럼을 제외할지 결정합니다.
  • True일 경우, NaN 값이 포함된 행은 마진 계산 전에 제외됩니다.

margins_name (str, 기본값: 'All')

  • margins=True일 때 합계 행/열의 이름을 지정합니다.

observed (bool, 기본값: False)

  • 범주형 데이터에만 적용됩니다.
  • True: 관찰된 범주 값만 표시
  • False: 모든 범주 값 표시
  • 주의: 2.2.0 버전부터 기본값이 True로 변경될 예정입니다.

sort (bool, 기본값: True)

  • 결과를 정렬할지 여부를 지정합니다.

 

4. 실제 사용 예시

[기본 사용법]

 
import pandas as pd

# 샘플 데이터
data = {
    '지역': ['서울', '서울', '부산', '부산', '대구', '대구'],
    '제품': ['A', 'B', 'A', 'B', 'A', 'B'],
    '매출': [100, 150, 80, 120, 90, 110],
    '수량': [10, 15, 8, 12, 9, 11]
}
df = pd.DataFrame(data)

# 기본 피벗 테이블
pivot = pd.pivot_table(df, values='매출', index='지역', columns='제품')

결과

 

[다중 집계 함수 사용]

# 여러 집계 함수 적용
pivot_multi = pd.pivot_table(df, values='매출', index='지역', columns='제품', 
                            aggfunc=['mean', 'sum'])

결과

[마진(합계) 포함]

# 합계 행/열 포함
pivot_margins = pd.pivot_table(df, values='매출', index='지역', columns='제품', 
                              margins=True, margins_name='전체')

결과

5. 주요 특징

  • 계층적 인덱스 지원 : 피벗 테이블의 결과는 MultiIndex 객체를 사용하여 계층적 구조를 지원합니다. 이를 통해 복잡한 데이터 구조를 효과적으로 표현할 수 있습니다.
  • 유연한 집계 : 다양한 집계 함수를 사용할 수 있으며, 열별로 서로 다른 집계 함수를 적용할 수도 있습니다.
  • 결측값 처리 : fill_value 매개변수를 통해 결측값을 원하는 값으로 대체할 수 있어 데이터 분석 시 편의성을 제공합니다.

 

6. 활용 팁

  1. 대용량 데이터 처리: 큰 데이터셋의 경우 필요한 열만 values로 지정하여 성능을 향상시킬 수 있습니다.
  2. 범주형 데이터: observed=True를 사용하여 실제 존재하는 범주만 표시하면 더 깔끔한 결과를 얻을 수 있습니다.
  3. 다중 분석: 여러 집계 함수를 동시에 사용하여 한 번에 다양한 통계치를 확인할 수 있습니다.

 

7. 결론

pivot_table은 pandas의 핵심 기능 중 하나로, 복잡한 데이터 분석 작업을 간단하게 만들어줍니다. 다양한 매개변수를 조합하여 원하는 형태의 요약 테이블을 생성할 수 있으며, 데이터 탐색과 분석에 매우 유용한 도구입니다.

 

 

 

Reference : https://pandas.pydata.org/docs/reference/api/pandas.pivot_table.html

반응형