기본 개념
- 칼럼 이름을 index(행 이름)으로 전환한다.
+ 기존 index가 있으면 하위 레벨로 들어간다.(기존 것이 상위 레벨)
구문
- df.stack()
매개변수
- dropna=False : stacking시, 생성되는 NA(결측치)는 제거되지 않게 한다.
+ default : True => 제거
# 위의 데이터 프레임은 관측치를 제대로 파악하기가 어렵다.
# stack으로 변경해준다.
s1 = state_fruit.stack()
s1
# 인덱스 제거
s2 = s1.reset_index()
s2
# 멀티 인덱스일 때, 가장 바깥 쪽 컬럼 레벨은 0, 다음 레벨 1, 다음 레벨 2, ...
# 안으로 들어 갈수록 레벨이 올라간다.
# 축에 이름주기
print(type(state_fruit.stack().rename_axis(['state','fruit'])))
# 이름 다 바꿔주기
s2.columns = ['state', 'fruits', 'stack']
s2
# 시리즈 value의 컬럼명을 지정해주기
state_fruit.stack().rename_axis(['state','fruit']).reset_index(name='stock')
기본 개념
- stack()의 반대로 index를 컬럼으로 변환한다.
구문
- df.unstack()
매개변수
- level
+ multi-index일 경우, 컬럼으로 만들 레벨을 지정한다.
+ 기본값은 -1로 가장 안쪽의 index를 이동시킨다.
# 스택의 반대
s3 = s2.set_index(['state','fruits'])
s3
s3.unstack()
# state가 올라간다.
s3.unstack(level=0)
# 컬럼 삭제
# df.droplevel()
# 멀티 인덱스인 인덱스나 컬럼 중 하나의 레벨을 삭제
# 멀티 인덱스인 인덱스만 삭제 가능.
# 삭제할 레벨 알려줘야 한다.
# 삭제할 축을 지정해줘야 한다.
s3.unstack(level=0).droplevel(level=0,axis=1) # 위에 stack이 삭제된다.
구문
- df.melt()
매개변수
- id_vars
+ 값으로 변환하지 않고 그대로 유지하고자 하는 컬럼 이름(열이름)들의 리스트.
+ 식별변수라고도 한다.
+ 지정한 변수(컬럼)은 같은 열에 남게 되지만, value_vars에 전달된 각 열에 대해 반복적으로 나타난다.
- value_vars
+ value_vars에 지정한 컬럼이 value가 되고, 그 컬럼의 값들은 다른 컬럼으로 생성된다.
+ id_vars와 value_vars에 지정 안 된 컬럼은 제거된다.
+ 제거되지 않고 단독 컬럼으로 유지되길 바라는 컬럼은 id_vars로 지정된다.
- melt한 경우, index 이름은 무시된다.
- RangeIndex로 대체된다.
- index를 유지하려면 reset_index를 이용해 value로 뺀 뒤 해야 한다.
- stack은 열 이름을 index 명으로 정돈(변경)한다.