지난번 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
'Data' 카테고리의 다른 글
[업무자동화][python] 회사 엑셀 파일 가공하기 (feat. xlwings) (0) | 2024.08.11 |
---|---|
[python] 무신사 상품 리뷰 크롤링1. 상품 url/제목/가격 가져오기 (BeautifulSoup, 정규표현식) (383) | 2022.11.06 |
게임 사용자 관리 비즈니스 시나리오 (420) | 2022.03.26 |
[Tableau] 쿠폰 성과 측정 대시보드 (753) | 2022.02.27 |
[Tableau] 반품 고객 관리 대시보드 (비저블 합격!) (386) | 2022.01.10 |