본문 바로가기
파이썬(Python)

파이썬-피봇테이블(pivot table) NaN, 다중컬럼 처리하기

by 즐거운코딩 2025. 8. 17.
반응형

데이터프레임을 활용한 통계작업으로 pivot_table 과 groupby 를 많이 사용합니다.

그런데 다양한 통계데이터 처리를 하기 위해 몇가지 팁을 알면 좀 더 효율적인 작업이 가능합니다.

 

이번에는 기본적인 피봇테이블 사용과 데이터가 결측치로 없을 때 처리방법, 

그리고 여러 컬럼의 데이터를 통계로 한번에 표출하는 방법에 대해 정리하였습니다.

 

1.  기본 Pivot Table 만들기

일반적인 데이터프레임에서 values, index, columns, aggfunc 값을 지정

 

👉 aggfunc

sum (합계), count (개수), mean (평균), median (중앙값), min (최소값), max (최대값), std (표준편차)

 

인덱스 2개, 컬럼 1개에 대한 sum 사용

import pandas as pd

# 샘플 데이터 생성
data = {
    '지역': ['서울', '서울', '부산', '부산', '대구', '대구'],
    '월': ['1월', '2월', '1월', '2월', '1월', '2월'],
    '매출': [100, 200, 150, 250, 120, 300]
}
df = pd.DataFrame(data)

df

 

    지역   월   매출
0   서울  1월  100
1   서울  2월  200
2   부산  1월  150
3   부산  2월  250
4   대구  1월  120
5   대구  2월  300

 

pivot1 = pd.pivot_table(df, 
                        index=['지역', '월'], 
                        values='매출', 
                        aggfunc='sum')

pivot1

 

2. Pivot Table 결과 값이 NaN 으로 나올 때 처리

인덱스 2개, 컬럼 1개

fill_value 속성 이용 '0' 으로 값을 채움

# 일부 데이터 제거해서 NaN 발생시키기
df2 = df.drop(1)  # 서울 2월 데이터 제거

pivot2 = pd.pivot_table(df2, 
                        index=['지역'], 
                        values='매출',
                        columns=['월'], 
                        aggfunc='sum', 
                        fill_value=0)

pivot2

 

3.  여러 열에 대해 각기 다른 집계 함수 적용

인덱스 2개, 값 2개

aggfunc={'컬럼1':'sum','컬럼2':'mean'} → 컬럼별 다른 연산 적용 가능

data = {
    '지역': ['서울', '서울', '부산', '부산', '대구', '대구'],
    '월': ['1월', '2월', '1월', '2월', '1월', '2월'],
    '매출': [100, 200, 150, 250, 120, 300],
    '비용': [50, 80, 60, 90, 55, 100]
}
df = pd.DataFrame(data)

df


pivot3 = pd.pivot_table(df, 
                        index=['지역', '월'], 
                        values=['매출', '비용'], 
                        aggfunc={'매출': 'sum', '비용': 'mean'})

pivot3

 

df

 

pivot3

 

4.  하나의 열에 대해 여러 집계 함수 동시에 적용

pivot4 = pd.pivot_table(df, 
                        index=['지역', '월'], 
                        values=['매출', '비용'], 
                        aggfunc={'매출': 'sum', '비용': ['min','mean', 'max']})

pivot4

    비용에 대해 min, max, mean 이 각각 표시

pivot4

 

추가로 df.reset_index() 사용시 인덱스를 그룹화 하지 않은 열로 변경 가능

반응형