워로디스

Pandas. stack() 과 unstack() 본문

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()이 더 이해하기 쉬운 경우가 많습니다.

반응형