Pandas MultiIndex에서 레벨 이름으로 여러 레벨 제거하기
pandas의 multiIndex.droplevel() 메서드를 사용하면 레벨 이름을 지정하여 멀티 인덱스(MultiIndex)에서 여러 레벨을 한 번에 제거하고, 나머지 인덱스를 반환할 수 있습니다. 이때 제거하려는 레벨 이름을 매개변수로 전달하면 됩니다.
1. 필요한 라이브러리 임포트
먼저 pandas 라이브러리를 임포트합니다.
import pandas as pd
2. 멀티 인덱스 생성
pd.MultiIndex.from_arrays()를 사용해 멀티 인덱스를 생성합니다. 이때 names 매개변수를 활용하면 각 인덱스 레벨에 이름을 부여할 수 있습니다.
multiIndex = pd.MultiIndex.from_arrays([[5, 10], [15, 20], [25, 30], [35, 40]], names=['a', 'b', 'c', 'd'])
위 코드에서는 네 개의 배열로 구성된 멀티 인덱스를 만들고, 각 레벨에 'a', 'b', 'c', 'd'라는 이름을 지정했습니다.
3. 멀티 인덱스 출력
print("Multi-index...\n", multiIndex)
4. 레벨 이름으로 여러 레벨 제거
droplevel() 메서드에 제거하려는 레벨 이름들을 리스트로 전달합니다. 여기서는 'a'와 'd' 레벨을 제거합니다.
print("\nDropping multiple level...\n", multiIndex.droplevel(['a', 'd']))
전체 예제 코드
지금까지 설명한 내용을 하나의 완성된 코드로 정리하면 다음과 같습니다.
import pandas as pd
# 멀티 인덱스 생성
# names 매개변수로 각 레벨의 이름을 설정
multiIndex = pd.MultiIndex.from_arrays([[5, 10], [15, 20], [25, 30], [35, 40]], names=['a', 'b', 'c', 'd'])
# 멀티 인덱스 출력
print("Multi-index...\n", multiIndex)
# 레벨 이름을 사용해 여러 레벨 제거
# 제거할 레벨의 이름들을 매개변수로 전달
print("\nDropping multiple level...\n", multiIndex.droplevel(['a', 'd']))
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Multi-index... MultiIndex([( 5, 15, 25, 35),(10, 20, 30, 40)], names=['a', 'b', 'c', 'd']) Dropping multiple level... MultiIndex([(15, 25),(20, 30)], names=['b', 'c'])
결과 분석
출력 결과를 보면 원래 'a', 'b', 'c', 'd' 네 개의 레벨로 구성되어 있던 멀티 인덱스에서 'a'와 'd' 레벨이 성공적으로 제거되었으며, 'b'와 'c' 두 개의 레벨만 남은 새로운 인덱스가 반환된 것을 확인할 수 있습니다.
참고: droplevel() 메서드는 레벨 이름 대신 레벨 번호(정수)를 전달해서도 동일하게 작동합니다. 예를 들어 multiIndex.droplevel([0, 3])은 위 예제와 같은 결과를 반환합니다. 또한 단일 레벨만 제거하는 경우에는 리스트 없이 문자열 하나만 전달하면 됩니다.