반응형
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
val1, val2가 속한 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
반응형
'파이썬완전정복-Pandas DataFrame > 17. 멀티인덱스' 카테고리의 다른 글
Pandas DataFrame 17-05 인덱스 제거 (droplevel) (0) | 2022.03.13 |
---|---|
Pandas DataFrame 17-04 인덱스 순서변경 (swaplevel) (0) | 2022.03.13 |
Pandas DataFrame 17-02 피벗화, 열의 인덱스화 (stack) (0) | 2022.03.13 |
Pandas DataFrame 17-01 하위분류반환 (xs) (0) | 2022.03.13 |