Pandas는 강력한 데이터 분석 도구로 잘 알려져 있으며, 그 중에서도 MultiIndex
는 복잡한 데이터 구조를 깔끔하게 표현할 수 있는 기능입니다.
이 포스트에서는 Pandas MultiIndex의 개념부터 생성, 활용, 주의사항까지 한 번에 정리해드립니다. 데이터 분석에 있어 꼭 알아야 할 핵심 기능이에요!
1. MultiIndex란?
MultiIndex
는 Pandas에서 2단계 이상의 인덱스를 갖는 계층형 인덱스 구조입니다.
엑셀에서 피벗 테이블을 만들면 생기는 다단계 열 구조를 떠올리면 이해가 쉬워요.
예를 들어, 아래처럼 회사명과 연도를 인덱스로 가진 데이터를 생각해볼 수 있습니다.
Company | Year | Sales |
---|---|---|
A | 2020 | 100 |
A | 2021 | 110 |
B | 2020 | 200 |
B | 2021 | 210 |
이 데이터를 MultiIndex로 바꾸면 다음과 같이 표현됩니다:
Company Year
A 2020 100
2021 110
B 2020 200
2021 210
2. MultiIndex 생성 방법
(1) set_index()
사용
import pandas as pd
df = pd.DataFrame({
'Company': ['A', 'A', 'B', 'B'],
'Year': [2020, 2021, 2020, 2021],
'Sales': [100, 110, 200, 210]
})
df_multi = df.set_index(['Company', 'Year'])
print(df_multi)
(2) MultiIndex.from_tuples()
index = pd.MultiIndex.from_tuples(
[('A', 2020), ('A', 2021), ('B', 2020), ('B', 2021)],
names=['Company', 'Year']
)
values = [100, 110, 200, 210]
df = pd.DataFrame({'Sales': values}, index=index)
print(df)
3. 인덱싱과 슬라이싱
MultiIndex를 사용하면 다단계로 인덱싱할 수 있습니다.
# 특정 회사만 선택
print(df.loc['A'])
# 다단계 인덱싱
print(df.loc[('A', 2021)])
또는 pd.IndexSlice
를 활용하면 범위 선택도 가능합니다:
idx = pd.IndexSlice
print(df.loc[idx[:, 2020], :]) # 2020년 데이터 전체
4. reset_index로 일반 인덱스로 되돌리기
MultiIndex를 원래처럼 일반 인덱스로 되돌릴 수 있습니다.
df_reset = df.reset_index()
print(df_reset)
5. groupby와 MultiIndex
groupby()
연산 결과도 MultiIndex를 가진 결과가 자주 등장합니다.
df = pd.DataFrame({
'Region': ['서울', '서울', '부산', '부산'],
'Year': [2020, 2021, 2020, 2021],
'Sales': [100, 110, 200, 210]
})
grouped = df.groupby(['Region', 'Year']).sum()
print(grouped)
이 결과는 자동으로 MultiIndex가 적용된 상태가 됩니다.
6. MultiIndex에서 unstack과 stack
unstack()
과 stack()
은 MultiIndex를 활용한 대표적인 변환 방법입니다.
# Year를 열로 이동
print(grouped.unstack())
# 다시 행으로 이동
print(grouped.unstack().stack())
7. MultiIndex의 활용 팁
상황 | MultiIndex 장점 |
---|---|
피벗 테이블처럼 다단계 그룹화 | 계층형 구조로 정돈 |
시계열 데이터 관리 | 년/월/일 구조로 나눠서 조회 용이 |
그룹 통계 계산 | groupby().agg() 결과에 자동 MultiIndex 생성 |
8. MultiIndex 정렬 및 이름 변경
# 정렬
df_sorted = df.sort_index(level='Year')
# 레벨 이름 변경
df.index.names = ['회사명', '연도']
레벨별 정렬이나 이름 조정도 쉽게 가능합니다.
9. MultiIndex 주의할 점
- 인덱싱이 직관적이지 않을 수 있음 →
IndexSlice
를 적절히 활용 reset_index()
후 정렬이 엉킬 수 있으므로 주의- 너무 많은 레벨이 있는 경우 가독성이 떨어질 수 있음
10. 결론
Pandas MultiIndex
는 복잡한 데이터를 보다 구조적이고 명확하게 표현할 수 있는 매우 강력한 기능입니다.
처음에는 생소할 수 있지만, 실무에서 groupby
, pivot
, stack/unstack
과 함께 자주 사용되므로 꼭 익혀야 할 필수 기능입니다.
'프로그래밍 > 파이썬(Python)' 카테고리의 다른 글
[Pandas] Join (0) | 2025.04.20 |
---|---|
Python 축(axis) (0) | 2025.03.28 |
파이썬(Python) 텐서(Tensor)란? (0) | 2023.03.01 |
파이썬(Python) 아나콘다(Anaconda) 가상환경 설정 (0) | 2023.02.14 |
파이썬(Python) 개발 환경 설치 (2) | 2023.02.08 |