MultiIndex를 생성하려면 from_arrays() 메서드를 사용합니다. 반면, 특정 레벨을 기준으로 MultiIndex를 정렬하려면 Pandas의 sortlevel() 메서드를 활용하면 됩니다. 이때 정렬하고자 하는 레벨을 인수로 지정합니다.
기본 사용 방법
먼저 필요한 라이브러리를 임포트합니다.
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를 정렬합니다. 정렬 기준이 되는 특정 레벨을 매개변수로 전달하며, 여기서는 레벨 1(student)을 기준으로 정렬합니다.
print("\nSort MultiIndex at the requested level...\n", multiIndex.sortlevel(1))전체 예제 코드
다음은 지금까지 설명한 내용을 모두 포함한 완성된 코드입니다.
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)
# MultiIndex 정렬
# 정렬할 특정 레벨을 매개변수로 지정합니다. 여기서는 레벨 1입니다.
print("\nSort MultiIndex at the requested level...\n", multiIndex.sortlevel(1))실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
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']]
Sort MultiIndex at the requested level...
(MultiIndex([(3, 'Andy'),
(4, 'Chris'),
(1, 'Jacob'),
(2, 'Peter')],
names=['ranks', 'student']), array([2, 1, 3, 0], dtype=int64))결과 해석
출력 결과를 보면 sortlevel(1)을 호출한 후 두 번째 레벨인 student 이름 순서대로('Andy' → 'Chris' → 'Jacob' → 'Peter') MultiIndex가 재정렬된 것을 확인할 수 있습니다. 또한 해당 메서드는 정렬된 MultiIndex와 함께 원본 데이터에서의 위치를 나타내는 정수 배열(array([2, 1, 3, 0]))을 튜플 형태로 반환합니다. 이처럼 sortlevel()을 사용하면 계층형 인덱스에서 원하는 레벨만 기준으로 간편하게 데이터를 정렬할 수 있습니다.