stack
, unstack
함수를 사용해 DataFrame을 변경하는 방법에 대해 공부해보자.
stack은 쌓다라는 의미를 가진다.
stack을 쉽게 이해하려면 Data를 row level로 쌓는다는 의미로 이해하는 것이 좋다.
즉, column level에 있는 데이터를 row(index) level로 바꾸어 쌓는 것이다.
또한 unstack은 stack의 반대이므로 stack과는 반대로 row level의 data를 column level로 바꾸어 쌓는다.
# <in>
import numpy as np
import pandas as pd
# <in>
df = pd.DataFrame({
'지역': ['서울', '서울', '서울', '경기', '경기', '부산', '서울', '서울', '부산', '경기', '경기', '경기'],
'요일': ['월요일', '화요일', '수요일', '월요일', '화요일', '월요일', '목요일', '금요일', '화요일', '수요일', '목요일', '금요일'],
'강수량': [100, 80, 1000, 200, 200, 100, 50, 100, 200, 100, 50, 100],
'강수확률': [80, 70, 90, 10, 20, 30, 50, 90, 20, 80, 50, 10]
})
우선 지역, 요일 column을 set_index()
함수를 사용해 multi index로 지정해주겠다.
# <in>
new_df = df.set_index(['지역','요일'])
new_df
지역, 요일 순으로 index가 설정된 것을 확인할 수 있다.
unstack
함수를 먼저 사용해보자.
1. unstack()
# <in>
new_df.unstack()
unstack
함수의 level parameter의 default값은 -1 이다. 즉 multi index일 때, 뒤에서 첫번째 index를 선택해 unstacking 하겠다는 것이다.
때문에 new_df에서 두번째 index column인 요일이 column level로 변경됐다.
이번엔 unstack()
함수의 level parameter의 값을 0으로 지정해보자.
# <in>
new_df.unstack(0)
new_df의 첫 번째 index column이 column level로 변경된 것을 확인할 수 있다.
이제 unstack
함수로 변경된 DataFrame에 stack()
함수를 사용해보자.
2. stack()
# <in>
new_df.unstack(0).stack(0)
첫번째 column level인 강수량, 강수확률 column이 row(index) level로 변경된 것을 확인할 수 있다.
- stack & unstack
- stack : 컬럼 레벨에서 인덱스 레벨로 dataframe 변경한다.
- 즉, 데이터를 쌓아올리는 개념으로 이해하면 쉽다.
- unstack : 인덱스 레벨에서 컬럼 레벨로 dataframe 변경한다.
- stack의 반대 operation
- 둘은 역의 관계에 있다
- stack : 컬럼 레벨에서 인덱스 레벨로 dataframe 변경한다.
'python > pandas' 카테고리의 다른 글
22. pandas DataFrame - merge & join 함수 활용 (0) | 2023.02.27 |
---|---|
21. pandas DataFrame - concat 함수. dataframe 병합 (0) | 2023.02.26 |
19. pandas DataFrame - pivot, pivot_table 함수 (0) | 2023.02.26 |
18. pandas DataFrame - transfrom함수 (2) | 2023.02.26 |
17. pandas DataFrame - groupby (0) | 2023.02.22 |