Python/Pandas

[Pandas] 피벗 테이블 - pivot_table()

죵욜이 2024. 12. 16. 04:19

Pivot Table (피벗 테이블)

  • 데이터를 요약하거나 재구조화 할때 유용하게 사용
  • 엑셀의 피벗테이블 과 유사
  • 데이터프레임을 특정 열을 기준으로 요약하고 집계 가능

기본 구조

  •  pivot_table()  함수를 사용
  • 아래와 같은 매개변수 제공
pd.pivot_table(
    data,          # 데이터프레임
    values=None,   # 집계할 값
    index=None,    # 행 기준으로 사용할 열
    columns=None,  # 열 기준으로 사용할 열
    aggfunc='mean',# 집계 함수 (기본값: 평균)
    fill_value=None, # NaN 대체값
    margins=False  # 행과 열의 합계 표시 여부
)

예시 데이터

import pandas as pd

data = {
    'Region': ['North', 'South', 'East', 'West', 'North', 'South', 'East', 'West'],
    'Product': ['A', 'A', 'B', 'B', 'A', 'B', 'B', 'A'],
    'Sales': [100, 150, 200, 300, 400, 350, 250, 100]
}

df = pd.DataFrame(data)
print(df)
# 출력
   Region Product  Sales
0  North       A    100
1  South       A    150
2   East       B    200
3   West       B    300
4  North       A    400
5  South       B    350
6   East       B    250
7   West       A    100

(1) 기본 피벗테이블 생성

  •  index  와  values  지정
# Region을 행으로, Sales를 값으로 요약
pivot = pd.pivot_table(df, index='Region', values='Sales', aggfunc='sum')
print(pivot)
# 출력
        Sales
Region       
East      450
North     500
South     500
West      400
  •  Region 을 기준으로 그룹화하고,  Sales  값을 합계( sum ) 로 집계

(2)  columns  지정

# Region을 행으로, Product를 열로 설정
pivot = pd.pivot_table(df, index='Region', columns='Product', values='Sales', aggfunc='sum')
print(pivot)
# 출력
Product       A      B
Region                
East        NaN  450.0
North     500.0    NaN
South     150.0  350.0
West      100.0  300.0
  •  Region  을 행으로,  Product  를 열로,  Sales  를 값으로 설정
  • 결측값( NaN )은 해당 조합에 데이터가 없음

(3) fill_value  로 결측값 대체

# NaN 값을 0으로 대체
pivot = pd.pivot_table(df, index='Region', columns='Product', values='Sales', aggfunc='sum', fill_value=0)
print(pivot)
# 출력
Product      A    B
Region             
East         0  450
North      500    0
South      150  350
West       100  300
  •  fill_value=0  을 사용해 결측값을  으로 대체

(4) 여러 집계 함수 적용

# 여러 집계 함수 적용
pivot = pd.pivot_table(df, index='Region', values='Sales', aggfunc=['sum', 'mean', 'count'])
print(pivot)
# 출력
           sum   mean  count
Region                      
East      450  225.0      2
North     500  250.0      2
South     500  250.0      2
West      400  200.0      2
  •  aggfunc  에 리스트를 전달해 합계( sum ), 평균( mean ), 개수( count )를 동시에 계산

(5)  margins=True  로 총합 계산

pivot = pd.pivot_table(df, index='Region', columns='Product', values='Sales', aggfunc='sum', margins=True, fill_value=0)
print(pivot)
# 출력
Product      A    B   All
Region                   
East         0  450   450
North      500    0   500
South      150  350   500
West       100  300   400
All        750 1100  1850
  • 행과 열의 합계 추가

(6) 다중  index  와  columns  지정

# Region, Product를 행, 열로 설정
pivot = pd.pivot_table(df, index=['Region', 'Product'], values='Sales', aggfunc='sum')
print(pivot)
# 출력
                    Sales
Region Product           
East   B             450
North  A             500
South  A             150
       B             350
West   A             100
       B             300