Data Science/Pandas
Pandas. stack() 과 unstack()
워로디스
2026. 8. 6. 22:47
stack() / unstack()은 행과 열의 계층을 서로 이동시키는 함수입니다. 특히 MultiIndex가 있는 데이터를 변형할 때 사용합니다.
핵심적으로 보면:
stack(): 열 → 행 인덱스unstack(): 행 인덱스 → 열
1. stack()은 언제 쓰나?
가로로 넓게 퍼진 데이터를 세로로 길게 바꿀 때 사용합니다.
import pandas as pd
df = pd.DataFrame({
"국어": [90, 80],
"수학": [85, 95]
}, index=["철수", "영희"])
print(df)
국어 수학
철수 90 85
영희 80 95
df.stack()
철수 국어 90
수학 85
영희 국어 80
수학 95
dtype: int64
즉, 과목이 열에 있었는데 stack() 후에는 행 인덱스의 한 단계가 됩니다.
이런 상황에서 유용합니다.
- 여러 측정값 열을 하나의 인덱스 단계로 묶을 때
- 열이
MultiIndex인 복잡한 표를 길게 변환할 때 - 그룹 연산이나 시계열 분석을 위해 데이터를 정규화할 때
- Excel 피벗 테이블과 비슷한 데이터를 풀어낼 때
2. unstack()은 언제 쓰나?
세로로 길게 저장된 데이터를 가로 표 형태로 펼칠 때 사용합니다.
s = df.stack()
s.unstack()
국어 수학
철수 90 85
영희 80 95
특히 groupby() 결과를 표 형태로 보고 싶을 때 자주 사용합니다.
sales = pd.DataFrame({
"지역": ["서울", "서울", "부산", "부산"],
"상품": ["A", "B", "A", "B"],
"매출": [100, 150, 80, 120]
})
result = sales.groupby(["지역", "상품"])["매출"].sum()
지역 상품
부산 A 80
B 120
서울 A 100
B 150
result.unstack()
상품 A B
지역
부산 80 120
서울 100 150
이 경우 상품 인덱스가 열로 이동합니다.
3. 실제로 쓸 일이 많은가?
일반적인 데이터 분석에서는 가끔 사용하고, 피벗·집계 작업에서는 꽤 자주 사용합니다.
다만 처음부터 stack()과 unstack()을 직접 사용하는 경우보다는 다음 함수가 더 직관적이라 많이 쓰입니다.
| 목적 | 주로 사용하는 함수 |
|---|---|
| 긴 형식 → 넓은 형식 | pivot(), pivot_table() |
| 넓은 형식 → 긴 형식 | melt() |
| MultiIndex의 행·열 이동 | stack(), unstack() |
| 그룹 집계 결과를 표로 펼치기 | groupby().sum().unstack() |
실무적으로는 다음 패턴이 가장 흔합니다.
df.groupby(["날짜", "상품"])["매출"].sum().unstack()
반면 단순한 일반 열을 세로로 변환하려는 목적이라면 stack()보다 melt()가 읽기 쉽습니다.
df.reset_index().melt(
id_vars="index",
var_name="과목",
value_name="점수"
)
4. 기억하는 방법
stack : 열을 아래로 쌓는다
unstack : 인덱스를 옆으로 펼친다
정리하면, stack()과 unstack()은 일반적인 열 이름보다 MultiIndex를 다룰 때 진가가 드러나는 함수입니다. 단순 데이터 변형은 melt()와 pivot_table()이 더 이해하기 쉬운 경우가 많습니다.
반응형