pivot, pivot_table 함수의 이해 및 활용하기

학습목표

  1. pivot, pivot_table 함수의 이해
import numpy as np
import pandas as pd
df = pd.DataFrame({
    '지역': ['서울', '서울', '경기', '경기', '부산', '서울', '서울', '부산', '경기', '경기', '경기'],
    '요일': ['월요일', '수요일', '월요일', '화요일', '월요일', '목요일', '금요일', '화요일', '수요일', '목요일', '금요일'],
    '강수량': [80, 1000, 200, 200, 100, 50, 100, 200, 100, 50, 100],
    '강수확률': [70, 90, 10, 20, 30, 50, 90, 20, 80, 50, 10]
                  })

df
지역 요일 강수량 강수확률
0 서울 월요일 80 70
1 서울 수요일 1000 90
2 경기 월요일 200 10
3 경기 화요일 200 20
4 부산 월요일 100 30
5 서울 목요일 50 50
6 서울 금요일 100 90
7 부산 화요일 200 20
8 경기 수요일 100 80
9 경기 목요일 50 50
10 경기 금요일 100 10

pivot

  • dataframe의 형태를 변경
  • 인덱스, 컬럼, 데이터로 사용할 컬럼을 명시
df.pivot('지역', '요일') #index, column
강수량 강수확률
요일 금요일 목요일 수요일 월요일 화요일 금요일 목요일 수요일 월요일 화요일
지역
경기 100.0 50.0 100.0 200.0 200.0 10.0 50.0 80.0 10.0 20.0
부산 NaN NaN NaN 100.0 200.0 NaN NaN NaN 30.0 20.0
서울 100.0 50.0 1000.0 80.0 NaN 90.0 50.0 90.0 70.0 NaN
df.pivot('요일', '지역')
강수량 강수확률
지역 경기 부산 서울 경기 부산 서울
요일
금요일 100.0 NaN 100.0 10.0 NaN 90.0
목요일 50.0 NaN 50.0 50.0 NaN 50.0
수요일 100.0 NaN 1000.0 80.0 NaN 90.0
월요일 200.0 100.0 80.0 10.0 30.0 70.0
화요일 200.0 200.0 NaN 20.0 20.0 NaN
df.pivot('요일','지역','강수량')
지역 경기 부산 서울
요일
금요일 100.0 NaN 100.0
목요일 50.0 NaN 50.0
수요일 100.0 NaN 1000.0
월요일 200.0 100.0 80.0
화요일 200.0 200.0 NaN

pivot_table

  • 기능적으로 pivot과 동일
  • pivot과의 차이점
    • 중복되는 모호한 값이 있을 경우, aggregation 함수 사용하여 값을 채움
    • 기능은 groupby랑 거의 똑같고 , 연산을 하는것이 pivot_table이다.
pd.pivot_table(df, index='요일', columns='지역', aggfunc=np.mean)
강수량 강수확률
지역 경기 부산 서울 경기 부산 서울
요일
금요일 100.0 NaN 100.0 10.0 NaN 90.0
목요일 50.0 NaN 50.0 50.0 NaN 50.0
수요일 100.0 NaN 1000.0 80.0 NaN 90.0
월요일 200.0 100.0 80.0 10.0 30.0 70.0
화요일 200.0 200.0 NaN 20.0 20.0 NaN
pd.pivot_table(df, index='요일', columns='지역', aggfunc=np.mean, fill_value=0)
#fill_value=0으로 NaN값을 0으로 대체
강수량 강수확률
지역 경기 부산 서울 경기 부산 서울
요일
금요일 100 0 100 10 0 90
목요일 50 0 50 50 0 50
수요일 100 0 1000 80 0 90
월요일 200 100 80 10 30 70
화요일 200 200 0 20 20 0