@@ -13,13 +13,13 @@ toc_sticky: true
1313date : 2025-02-06 12:52:00 +0900
1414---
1515
16- ## 서론
16+ # 서론
1717   ; ` 학습로그 ` 를 처음 작성하기에 앞서, 내가 수업시간에 헷갈리던 부분이 무엇인가 작성한 코랩 파일을 하나씩 보며 되짚어봤다.
1818여러가지가 있었지만... 그 중에서도 잘 이해가 되지 않았던 ` stack ` 과 ` melt ` 가 눈에 들어왔다.
1919중요한 집계 파트이기도 했고, melt가 중요하다고 말씀하신 거 같았기에, 이번 기회에 확실히 개념을 잡고 넘어가면 좋을 거 같았다.
2020` stack ` 과 ` melt ` 의 용도를 헷갈리기 전에, ` 집계 ` 란 무엇인지 정확히 알고 가자.
2121
22- ## 본론
22+ # 본론
2323#### ** 집계란?**
2424   ; 여러 개의 값을 모아(** '집'** ) 계산하여(** '계'** ) <u >하나의 값으로 요약</u >하는 과정이다.
2525대표적인 집계 함수로는 mean(), min(), max() 등이 있다.
@@ -67,8 +67,7 @@ Index(['이름', '반', '국어', '수학', '영어'], dtype='object')
6767***
6868
6969해당 df를 사용하여 ` stack ` , ` melt ` 에 대해 자세히 이해해보자.
70- ` stack ` 과 ` melt ` 를 이해하기에 앞서, 보통의 DataFrame 컬럼은 ` 멀티인덱스 ` 를 갖지
71- 않지 않는다. 따라서 ` pivot_table ` 을 통해 집계를 시행하여 컬럼에 ` 멀티인덱스 ` 를 만든 뒤에, ` stack ` 과 ` melt ` 를 적용해보자.
70+ ` stack ` 과 ` melt ` 를 이해하기에 앞서, 보통의 DataFrame 컬럼은 ` 멀티인덱스 ` 를 갖지 않는다. 따라서 ` pivot_table ` 을 통해 집계를 시행하여 컬럼에 ` 멀티인덱스 ` 를 만든 뒤에, ` stack ` 과 ` melt ` 를 적용해보자.
7271
7372## pivot_table
7473- 컬럼에 있는 것들을 직접 index, columns, values,으로 지정하고, 원하는 집계 방법을 aggfunc에 적는다.
@@ -127,8 +126,8 @@ MultiIndex([('mean', '국어'),
127126 ( 'max', '영어')],
128127 )
129128```
130- 이렇게 표의 출력과 index와 columns를 확인을 통해 컬럼이 멀티인덱스로 변경됨을 확인할 수 있다.
131- 이 상태에서 stack을 사용한다면 어떤 변화가 일어날까?
129+ 이렇게 표의 출력과 index와 columns를 확인을 통해 컬럼이 ` 멀티인덱스 ` 로 변경됨을 확인할 수 있다.
130+ 이 상태에서 ` stack ` 을 사용한다면 어떤 변화가 일어날까?
132131
133132스택의 특징은 다음과 같다.
134133## stack
@@ -137,7 +136,7 @@ MultiIndex([('mean', '국어'),
137136 - 행 인덱스는 ` MultiIndex ` 가 됨
138137 - 표가 가로로 너무 길 경우(wide format), 세로로 길게 만들 수 있음(long format)
139138- ** 집계를 하기 위한 기능은 아니다!**
140- - ` 멀티인덱스 ` 는 ** 집계가 불가능** 하다 .
139+ - ` 멀티인덱스 ` 는 ** 집계가 불가능** 하기 때문 .
141140- stack() 안에 컬럼 레벨을 지정하지 않으면 가장 하위레벨이 자동으로 선택 된다.
142141- 결과적으로, 기존 표의 구조를 바꿔서 보기 쉽게 만든다.
143142
@@ -195,11 +194,16 @@ Index(['mean', 'min', 'max'], dtype='object')
195194***
196195
197196또한 stack의 반대 개념인 ` unstack ` 이 존재하는데, stack의 반대 개념이므로 가볍게 보고 넘어가자.
198- ### unstack()
197+ ## unstack()
199198- 행의 ` 멀티인덱스 ` 를 컬럼으로 올린다.
200199 - stack()의 반대개념이다.
201200- stack()을 실행한 DataFrame을 unstack하면 처음 형태가 된다.
202201
202+ ```
203+ stack : 컬럼 -> 행
204+ unstack : 행 -> 컬럼
205+ ```
206+
203207#### unstack() 사용법
204208``` python
205209df.unstack(행 인덱스 레벨)
@@ -210,11 +214,11 @@ df_stack.unstack()
210214```
211215` [출력] `
212216![ ] ( /images/../images/2025-02-05-23-18-42.png )
213- - 행 인덱스의 가장 하위레벨이었던 ` '국어', '수학', '영어' ` 가 컬럼인덱스의 가장 하위레벨이 되었다.
217+ - 행 인덱스의 가장 하위레벨이었던 ` '국어', '수학', '영어' ` 가 컬럼인덱스의 가장 ` 하위레벨 ` 이 되었다.
214218
215219***
216220
217- 위의 과정을 통해, ` stack ` 은 ** 컬럼레벨을 행의 인덱스** 만드는 것을 알게 되었다. 또한 stack을 통해 컬럼을 행 인덱스로
221+ 위의 과정을 통해, ` stack ` 은 ** 컬럼레벨을 행의 인덱스** 로 만드는 것을 알게 되었다. 또한 ` stack ` 을 통해 컬럼을 행 인덱스로
218222내리면, 인덱스가 합쳐져 ` 멀티인덱스 ` 가 됨을 알았다.
219223
220224컬럼이 ` 멀티인덱스 ` 인 경우 가로로 표가 길어져 가독성이 떨어지기 때문에 ` stack ` 을 통해 표의 구조를 보기 좋게 바꿀 수 있다.
@@ -225,8 +229,8 @@ df_stack.unstack()
225229
226230## melt
227231
228- - 기준을 잡은 컬럼들을 제외하고, 남은 컬럼들을 하나의 컬럼으로 녹임.
229- - 따라서 카테고리가 컬럼에 있다면, 해당 카테고리에 대해 집계를 할 수 있게 해준다.
232+ - 기준을 잡은 컬럼들을 제외하고, 남은 ** 컬럼들을 하나의 컬럼으로** 녹임.
233+ - 따라서 카테고리가 컬럼에 있다면, 해당 카테고리에 대해 ** 집계를 할 수 있게 해준다.**
230234
231235특징을 살펴보면 ` stack ` 과의 차이를 볼 수 있다. ` stack ` 은 ** 컬럼을 행인덱스로 만드는 것** 이고, ` melt ` 는 컬럼들을 기준을 두고 ** 하나의 컬럼으로 녹이는 것** 이다.
232236뭔가 알쏭달쏭 알 것 같지만, 아직 헷갈리기 때문에 직접 사용해서 비교해보자.
@@ -298,7 +302,7 @@ Index(['이름', '반', '과목', '점수'], dtype='object')
298302| 사용 예시 | ` df.stack() ` | ` pd.melt(df, id_vars=["기준 컬럼"]) ` |
299303| 주로 사용하는 상황 | 멀티인덱스가 필요할 때 | 데이터 시각화를 위해 긴 형태(long format)로 변환할 때 |
300304
301- ## 마무리
305+ # 마무리
302306   ; 학습로그를 태어나서 처음 작성해 보았는데, 내가 모르는 부분을 시간내서 조사하고,
303307 이해하는 게 생각보다 재밌어서 좋았다. 그러나 조사하고 공부한 내용들을 머릿속에서 꺼내서
304308 예쁘게 작성하는 게 어려웠다. 아직 요령이 없어서 그렇다고 생각한다. 앞으로 꾸준히 작성해서
0 commit comments