pandas의 MultiIndex에서 특정 레벨을 제거하고 싶을 때는 MultiIndex.droplevel() 메서드를 사용합니다. 이때 인자로 제거하려는 레벨의 이름(level name)을 전달하면 됩니다.
1. 라이브러리 임포트
먼저 필요한 라이브러리를 임포트합니다.
import pandas as pd
2. MultiIndex란?
MultiIndex는 pandas 객체에서 사용되는 다중 레벨(계층형) 인덱스 객체입니다. 하나의 인덱스에 여러 개의 레벨을 가질 수 있어 복잡한 데이터 구조를 효율적으로 표현할 수 있습니다.
3. 배열 생성 및 MultiIndex 만들기
예제에 사용할 배열을 생성합니다.
arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob']]
names 매개변수를 사용하면 각 인덱스 레벨에 이름을 부여할 수 있습니다. from_arrays() 메서드로 배열을 기반으로 MultiIndex를 생성합니다.
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('ranks', 'student'))여기서 첫 번째 레벨은 'ranks', 두 번째 레벨은 'student'라는 이름을 갖게 됩니다.
4. 레벨 이름으로 특정 레벨 제거하기
droplevel() 메서드의 인자에 제거하려는 레벨의 이름을 지정하면 해당 레벨이 삭제된 새로운 인덱스가 반환됩니다. 아래 예제에서는 'student' 레벨을 제거합니다.
print("\n레벨 제거 후 Multi-index...\n", multiIndex.droplevel('student'))전체 예제 코드
import pandas as pd
# MultiIndex는 pandas 객체를 위한 다중 레벨(계층형) 인덱스 객체입니다
# 배열 생성
arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob']]
# names 매개변수로 각 인덱스 레벨에 이름 부여
# from_arrays()를 사용해 MultiIndex 생성
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('ranks', 'student'))
# MultiIndex 출력
print("The Multi-index...\n", multiIndex)
# MultiIndex의 레벨 정보 확인
print("\nThe levels in Multi-index...\n", multiIndex.levels)
# 특정 레벨 제거 - 레벨 이름 'student'를 인자로 전달
print("\nMulti-index after dropping a level...\n", multiIndex.droplevel('student'))실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
The Multi-index...
MultiIndex([(2, 'Peter'),
(4, 'Chris'),
(3, 'Andy'),
(1, 'Jacob')],
names=['ranks', 'student'])
The levels in Multi-index...
[[1, 2, 3, 4], ['Andy', 'Chris', 'Jacob', 'Peter']]
Multi-index after dropping a level...
Int64Index([2, 4, 3, 1], dtype='int64', name='ranks')핵심 정리
실행 결과를 보면 'student' 레벨이 제거되고, 남은 'ranks' 레벨만 단일 인덱스(Int64Index) 형태로 반환된 것을 확인할 수 있습니다. 이처럼 droplevel() 메서드는 레벨 번호 대신 레벨 이름을 인자로 전달할 수 있어, 이름 기반으로 직관적으로 원하는 레벨을 제거할 수 있다는 장점이 있습니다.