반응형

17-03 언피벗화, 행의 열로 변환 (unstack)

DataFrame.unstack(level=- 1, fill_value=None)

 

개요


unstack 메서드는 행을 언피벗하여 하위 열로 변환하는 메서드입니다.
※ 열을 피벗하여 하위 행으로 변환하는 stack과 반대 개념입니다.

 

사용법


기본 사용법
※ 자세한 내용은 아래 예시를 참고 바랍니다.
df.unstack(level=- 1, fill_value=None)
level : MultiIndex의 경우 하위열로 변환할 행의 레벨입니다. 기본값은 -1로 최하위 레벨이 선택됩니다. 

fill_value : 생성된 열의 값에 결측치가 있을 경우 대체할 값입니다.

반응형

 

예시


먼저 기본적인 사용법 예시를위하여 멀티인덱스 데이터를 만들어보겠습니다.

data =[1,2,3,4,5]
idx = [['idx1','idx1','idx2','idx2','idx2'],['row1','row2','row1','row2','row3']]
df = pd.Series(data=data, index = idx)
print(df)
>>
idx1  row1    1
      row2    2
idx2  row1    3
      row2    4
      row3    5
dtype: int64


기본적인 사용법
level은 기본값이 -1이며, 최하위 레벨의 행에 대해 열로 언피벗 합니다.
아래 예시를 보면 최 하위 계층인 row1,row2가 속한 인덱스가 열로 언피벗 된것을 확인할 수 있습니다.

print(df.unstack())
>>
      row1  row2  row3
idx1   1.0   2.0   NaN
idx2   3.0   4.0   5.0


fill_value 인수를 사용할 경우, 언피벗으로 인해 행성된 결측치를 특정 값으로 지정할 수 있습니다.

print(df.unstack(fill_value='-'))
>>
     row1 row2 row3
idx1    1    2    -
idx2    3    4    5



좀 더 큰 다중인덱스에 대해서 예시를 들어보기위해 4레벨의 멀티인덱스를 생성해보겠습니다.

data = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
level0=['idx1','idx1','idx1','idx1','idx1','idx1','idx1','idx1',
        'idx2','idx2','idx2','idx2','idx2','idx2','idx2','idx2']
level1=['row1','row1','row1','row1','row2','row2','row2','row2',
        'row3','row3','row3','row3','row4','row4','row4','row4']
level2=['val1','val1','val2','val2','val1','val1','val2','val2',
        'val1','val1','val2','val2','val1','val1','val2','val2']
level3=['col1','col2','col3','col4','col1','col2','col3','col4',
        'col1','col2','col3','col4','col1','col2','col3','col4']
idx = [level0,level1,level2,level3]
df = pd.Series(data =data, index =idx)
print(df)
>>
idx1  row1  val1  col1     0
                  col2     1
            val2  col3     2
                  col4     3
      row2  val1  col1     4
                  col2     5
            val2  col3     6
                  col4     7
idx2  row3  val1  col1     8
                  col2     9
            val2  col3    10
                  col4    11
      row4  val1  col1    12
                  col2    13
            val2  col3    14
                  col4    15
dtype: int64


val1val2가 속한 level=2로 unstack메서드를 실행해보겠습니다.

print(df.unstack(level=2))
>>
                val1  val2
idx1 row1 col1   0.0   NaN
          col2   1.0   NaN
          col3   NaN   2.0
          col4   NaN   3.0
     row2 col1   4.0   NaN
          col2   5.0   NaN
          col3   NaN   6.0
          col4   NaN   7.0
idx2 row3 col1   8.0   NaN
          col2   9.0   NaN
          col3   NaN  10.0
          col4   NaN  11.0
     row4 col1  12.0   NaN
          col2  13.0   NaN
          col3   NaN  14.0
          col4   NaN  15.0


level에 튜플을 이용하여 Multi Columns로 unstack을 실행할 수 있습니다.

print(df.unstack(level=(2,3)))
>>
          col1 col2 col3 col4
idx1 row1    0    1    2    3
     row2    4    5    6    7
idx2 row3    8    9   10   11
     row4   12   13   14   15
반응형

+ 최근 글