Python

[파이썬] 데이터 집계 및 요약 - pandas, pivot_table, aggfunc

weweGH 2024. 10. 14. 17:16
반응형

pivot_table aggfunc
pivot_table aggfunc


데이터 집계 및 요약 - pandas, pivot_table


들어가며

파이썬으로 데이터 분석을 하기 위해 데이터를 집계하고 요약이 필요한 경우에는 pandas의 pivot_table이 매우 유용합니다. 한눈에 보기 편한 표를 만들 수 있는 피벗 테이블 기능에 집계를 할 때 사용하는 groupby의 기능을 aggfunc으로 옵션을 추가하여 사용할 수 있습니다.


캐글 데이터 소개

이 글에서 활용할 데이터는 캐글 데이터셋 중 미국의 전력 가격에 대한 데이터셋입니다. 2001년부터 2024년 기간 동안의 연도별 월별 지역별 전력 가격, 수익, 판매량에 대한 정보가 있습니다. 자세한 내용은 캐글 사이트를 참고 부탁드립니다.


데이터 분석

위에서 설명한 데이터셋으로 여러 컬럼들을 활용하여 피벗테이블을 만들어보겠습니다. 피벗테이블을 구성하는 요소와 함께 몇 개의 예제만 다뤄보면, 누구나 쉽게 분석표를 만들 수 있습니다.


먼저 필요한 패키지인 pandas를 설치하고 import 합니다. 그리고 데이터셋을 불러옵니다. 원래 데이터셋은 미국 전역에 대한 자료이지만, 편의를 위해 임의의 일부 지역으로 필터링 후 분석하겠습니다.

# pip install pandas
import pandas as pd
df = pd.read_csv('clean_data.csv')
df.head()

df head
df head


피벗 테이블을 이루는 구성 요소는 인덱스(index), 컬럼(columns), 값(values)입니다. 각각의 자리에 원하는 변수를 넣으면 됩니다. 인덱스는 행을, 컬럼은 열을 나타냅니다. 그리고 값에 대한 연산 방식을 aggfunc에 넣습니다. 

피벗 테이블 구성
피벗 테이블 구성


피벗 테이블 예제

다음은 연도별 월별 지역별 가격의 평균값, 중앙값 집계표입니다. 한눈에 원하는 정보가 요약된 집계표를 확인할 수 있습니다.

df_new = df.pivot_table(index=['year','month'], columns=['stateDescription'], aggfunc=['mean','median'], values='price').reset_index()
df_new.head()

df_new
df_new


다음은 연도별 월별 지역별 가격과 판매액에 대한 평균값입니다. 이렇게 1개의 컬럼이 아닌 여러 개의 컬럼에 대한 피벗 테이블도 가능합니다.

df_new1 = df.pivot_table(index=['year','month'], columns=['stateDescription'], aggfunc='mean', values=['price','sales']).reset_index()
df_new1.head()

df_new1
df_new1


다음은 연도를 인덱스로 설정하고, 월별 지역별 수익에 대한 평균을 집계한 표입니다.

df_new2 = df.pivot_table(index='year', columns=['month','stateDescription'], aggfunc='mean', values='revenue').reset_index()
df_new2.head()

df_new2
df_new2


위와 같이 pivot_table을 활용하면 인덱스, 컬럼, 값을 표현하는 방식에 따라 원하는 표를 편리하게 만들 수 있습니다. groupby를 하고 피벗테이블을 생성하는 것보다 pivot_table에서 aggfunc 옵션으로 훨씬 간편하게 표를 요약하고 집계할 수 있습니다.


전체 코드

# pip install pandas
import pandas as pd

df = pd.read_csv('clean_data.csv')
state_list = ['California', 'Florida', 'Hawaii', 'New York', 'Georgia']
df = df[df.stateDescription.isin(state_list)].reset_index(drop=True)
df.head()


df_new = df.pivot_table(index=['year','month'], columns=['stateDescription'], aggfunc = ['mean','median'], values='price').reset_index()
df_new.head()


df_new1 = df.pivot_table(index=['year','month'], columns=['stateDescription'], aggfunc='mean', values=['price','sales']).reset_index()
df_new1.head()


df_new2 = df.pivot_table(index=['year'], columns=['month','stateDescription'], aggfunc=['mean'], values=['revenue'])
df_new2.head()

 

반응형