1 분 소요

※ stack / unstack / melt

■ stack / unstack

  • stack : 컬럼 레벨에서 인덱스 레벨로 데이터프레임을 변경
  • unstack : 인덱스 레벨에서 컬럼 레벨로 데이터프레임을 변경
# e.g. 데이터
> data = pd.DataFrame({'name' : ['a', 'b', 'c'], 'order_count' : [3, 4, 10], 'amount' : [1000, 2400, 3000]})
> data
  name  order_count  amount
0    a            3    1000
1    b            4    2400
2    c           10    3000
# stack
> data.stack()
0  name              a
   order_count       3
   amount         1000
1  name              b
   order_count       4
   amount         2400
2  name              c
   order_count      10
   amount         3000

# unstack
> data.unstack()
name         0       a
             1       b
             2       c
order_count  0       3
             1       4
             2      10
amount       0    1000
             1    2400
             2    3000

> df.stack(0) # 컬럼의 첫 번째 레벨을 인덱스로 내림
> df.stack(1) # 컬럼의 두 번째 레벨을 인덱스로 내림

> df.unstack(0) # 인덱스의 첫 번째 레벨을 컬럼으로 올림
> df.unstack(1) # 인덱스의 두 번째 레벨을 컬럼으로 올림


■ melt

  • Untidy data to Tidy data
# 기본 구조
> pd.melt(df, id_vars = '기준컬럼', var_name = '', value_name = '')
> data = pd.DataFrame({'name' : ['a', 'b', 'c'], 'order_count' : [3, 4, 10], 'amount' : [1000, 2400, 3000]})
> data
  name  order_count  amount
0    a            3    1000
1    b            4    2400
2    c           10    3000

> pd.melt(data, id_vars = 'name')
> pd.melt(data, id_vars = 'name', var_name ='type', value_name = 'val') # 생성되는 key와 value명을 직접 지정

  name         type   val
0    a  order_count     3
1    b  order_count     4
2    c  order_count    10
3    a       amount  1000
4    b       amount  2400
5    c       amount  3000

댓글남기기