Pandas에서 MultiIndex 객체의 특정 레벨을 제거하고 그 결과를 새 인덱스로 반환하려면 multiIndex.droplevel() 메서드를 사용합니다. 이 메서드는 지정된 레벨(또는 여러 레벨)이 삭제된 새로운 MultiIndex를 생성하며, 원본 인덱스는 변경되지 않습니다.
1. 필요한 라이브러리 임포트
먼저 Pandas 라이브러리를 임포트합니다.
import pandas as pd
2. 멀티인덱스(MultiIndex) 생성
pd.MultiIndex.from_arrays() 메서드를 사용해 배열 리스트로부터 멀티인덱스를 만듭니다. 이때 names 매개변수를 지정하면 각 인덱스 레벨에 이름을 부여할 수 있어 이후 작업 시 가독성과 편의성이 크게 향상됩니다.
multiIndex = pd.MultiIndex.from_arrays([[5, 10], [15, 20], [25, 30], [35, 40]],
names=['a', 'b', 'c', 'd'])위 코드는 4개의 레벨(a, b, c, d)을 가진 멀티인덱스를 생성합니다.
3. 레벨 제거하기
droplevel() 메서드를 호출하면 기본적으로 첫 번째 레벨(level 0)이 제거됩니다. 특정 레벨을 제거하려면 레벨 이름 또는 정수 위치를 인자로 전달하면 됩니다.
print("\n레벨 제거 결과...\n", multiIndex.droplevel())전체 예제 코드
import pandas as pd
# 멀티인덱스 생성
# names 매개변수는 인덱스의 각 레벨에 이름을 설정합니다.
multiIndex = pd.MultiIndex.from_arrays([[5, 10], [15, 20], [25, 30], [35, 40]],
names=['a', 'b', 'c', 'd'])
print("멀티인덱스...\n", multiIndex)
# 멀티인덱스에서 첫 번째 레벨 제거
print("\n레벨 제거 결과...\n", multiIndex.droplevel())실행 결과
위 코드를 실행하면 다음과 같은 출력이 나타납니다.
멀티인덱스...
MultiIndex([( 5, 15, 25, 35),
(10, 20, 30, 40)],
names=['a', 'b', 'c', 'd'])
레벨 제거 결과...
MultiIndex([(15, 25, 35),
(20, 30, 40)],
names=['b', 'c', 'd'])핵심 포인트 정리
droplevel()은 인자 없이 호출하면 첫 번째 레벨(level 0)이 자동으로 제거됩니다.- 출력 결과를 보면 'a' 레벨이 사라지고 나머지 레벨(b, c, d)만 남은 새로운 MultiIndex가 반환됩니다.
- 여러 레벨을 한 번에 제거하려면
multiIndex.droplevel(['a', 'b'])처럼 리스트로 전달할 수 있습니다. - 원본 멀티인덱스는 수정되지 않으며, 항상 새로운 인덱스 객체가 반환됩니다.