Pandas에서 MultiIndex(다중 인덱스)를 생성하려면 from_arrays() 메서드를 사용하고, 생성된 MultiIndex를 정렬하려면 sortlevel() 메서드를 활용합니다.
MultiIndex란?
MultiIndex는 pandas 객체에서 사용할 수 있는 다층(multi-level), 즉 계층적(hierarchical) 인덱스 객체입니다. 하나의 인덱스에 여러 수준의 정보를 담을 수 있어 복잡한 데이터 구조를 효율적으로 표현할 때 유용합니다.
필요한 라이브러리 임포트
먼저 필요한 라이브러리를 임포트합니다.
import pandas as pd
배열 생성하기
MultiIndex를 만들기 위한 배열을 준비합니다.
arrays = [[2, 4, 3, 1], ['John', 'Tim', 'Jacob', 'Chris']]
from_arrays()로 MultiIndex 생성
names 매개변수는 각 인덱스 레벨의 이름을 지정합니다. 이후 from_arrays() 메서드를 사용해 MultiIndex를 생성합니다.
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('ranks', 'student'))sortlevel()로 MultiIndex 정렬하기
MultiIndex를 정렬할 때는 sortlevel() 메서드를 사용합니다. 별도의 레벨을 지정하지 않으면 기본적으로 레벨 0을 기준으로 정렬됩니다.
print("\nSort MultiIndex...\n", multiIndex.sortlevel())전체 예제 코드
지금까지 설명한 내용을 모두 포함한 전체 코드는 다음과 같습니다.
import pandas as pd
# MultiIndex는 pandas 객체를 위한 다층(계층적) 인덱스 객체입니다
# 배열 생성
arrays = [[2, 4, 3, 1], ['John', 'Tim', 'Jacob', 'Chris']]
# 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 정렬
# 기본값은 레벨 0 기준 정렬입니다
print("\nSort MultiIndex...\n", multiIndex.sortlevel())실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
The Multi-index...
MultiIndex([(2, 'John'),
(4, 'Tim'),
(3, 'Jacob'),
(1, 'Chris')],
names=['ranks', 'student'])
The levels in Multi-index...
[[1, 2, 3, 4], ['Chris', 'Jacob', 'John', 'Tim']]
Sort MultiIndex...
(MultiIndex([(1, 'Chris'),
(2, 'John'),
(3, 'Jacob'),
(4, 'Tim')],
names=['ranks', 'student']), array([3, 0, 2, 1], dtype=int64))결과 해석
출력 결과를 보면 원래 순서가 섞여 있던 인덱스가 ranks(레벨 0) 기준으로 오름차순 정렬된 것을 확인할 수 있습니다. 즉, (1, 'Chris'), (2, 'John'), (3, 'Jacob'), (4, 'Tim') 순으로 재배열되었습니다.
또한 sortlevel()은 정렬된 MultiIndex와 함께 새로운 위치를 나타내는 정수 배열(array([3, 0, 2, 1]))을 튜플 형태로 반환합니다. 특정 레벨을 기준으로 정렬하고 싶다면 multiIndex.sortlevel(level=1)처럼 level 매개변수에 원하는 레벨 번호를 지정하면 됩니다.