본문 바로가기

Data

[업무자동화][python] 회사 엑셀 파일 가공하기 (feat. groupby, pivot_table)

 

지난번 DRM 보안이 걸린 엑셀 파일을 읽어오고, 가공하는 것에 이어서 

group by와 pivot_table을 통해 데이터를 집계하는 과정이다.

 

 

# 2019~2020 기간동안 plant 고유개수, 지출결의금액 합, 지출결의금액 평균 구하기

 

예시1.

 

 

#groupby 사용
pd.DataFrame(df_result.fillna("").groupby(['품목군','L2','L3', '송장년도']).agg({ 'Plant' : 'nunique', 
                                                                          '지출결의금액' : ['sum', 'mean']}).round(0)
            )

#pivot_table 사용
df_result.fillna("").pivot_table( index = ['품목군','L2','L3', '송장년도'], values = ['Plant', '지출결의금액'],
                      aggfunc = { 'Plant' : 'nunique', 
                                 '지출결의금액' : ['sum', 'mean']}
                     )

 

- fillna("") 추가 이유 : null값이 존재하는 항목에 대해, 집계 자체를 하지 않음..고로 공백문자 삽입 필요 (groupby, pivot_table 모두 해당)

- 고유값 count는 nunique

- 측정값 컬럼에 따라 다른 집계 함수를 삽입할 수 있음

 

 

예시2.

 

송장년도를 컬럼으로 옆으로 보이게 하고 싶다면, pivot_table 사용!

이 경우, 멀티인덱스 순서가 values → columns 순임

pivot = df_result.fillna("").pivot_table( index = ['품목군','L2','L3'], values = ['Plant', '지출결의금액'],columns = ['송장년도'],
                      aggfunc = { 'Plant' : 'nunique', 
                                 '지출결의금액' : ['sum', 'mean']})
pivot.columns

 

 

예시3. pivot 테이블 필터링

 

파란색 괄호친 부분만 필터링한다고 가정해보자

멀티인덱스이므로, 인덱스 레벨을 고려해줘야한다.

 

 

pivot.xs( ('mean', 2019.0) , level = [1, '송장년도'], axis = 1)

 

- Multi indexer인 xs 사용

- 컬럼 기준으로 인덱싱하므로 axis = 1 필수 (기본값은 axis = 0)

- level 지정 필수

 

 

 

 

 

 

 

 

판다스(Pandas) .groupby()로 할 수 있는 거의 모든 것! (통계량, 전처리) - 테디노트 (teddylee777.github.io)

 

판다스(Pandas) .groupby()로 할 수 있는 거의 모든 것! (통계량, 전처리)

판다스(Pandas) .groupby()로 할 수 있는 거의 모든 것! (통계량, 전처리)에 대해 알아보겠습니다.

teddylee777.github.io