Pandas에서 MultiIndex의 레벨 순서를 바꾸고 싶다면 swaplevel() 메서드를 사용하면 됩니다. 서로 교환하고자 하는 두 개의 레벨을 인자로 전달하기만 하면 됩니다.
1. 라이브러리 임포트
먼저 필요한 라이브러리를 임포트합니다.
import pandas as pd
2. MultiIndex란?
MultiIndex는 Pandas 객체에서 사용할 수 있는 다중 레벨(계층형) 인덱스 객체입니다. 하나의 인덱스에 여러 개의 레벨을 두어 복잡한 데이터를 체계적으로 관리할 수 있습니다.
예제에서 사용할 배열을 생성해 보겠습니다.
arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob'], [50, 30, 40, 70]]
from_arrays()로 MultiIndex 생성
names 매개변수는 각 인덱스 레벨의 이름을 지정합니다. from_arrays() 메서드를 사용하면 배열로부터 MultiIndex를 손쉽게 만들 수 있습니다.
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('rank', 'student', 'points'))3. swaplevel()로 레벨 교환하기
swaplevel() 메서드를 사용하면 MultiIndex의 레벨을 교환할 수 있습니다.
- 첫 번째 매개변수: 교환할 첫 번째 인덱스 레벨
- 두 번째 매개변수: 교환할 두 번째 인덱스 레벨
아래 예제는 0번 레벨(rank)과 2번 레벨(points)의 위치를 서로 맞바꾸는 코드입니다.
print("\nSwap levels in MultiIndex...\n", multiIndex.swaplevel(0, 2))전체 예제 코드
지금까지 설명한 내용을 모두 포함한 전체 코드는 다음과 같습니다.
import pandas as pd
# MultiIndex는 Pandas 객체를 위한 다중 레벨(계층형) 인덱스 객체입니다.
# 배열 생성
arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob'], [50, 30, 40, 70]]
# names 매개변수로 각 인덱스 레벨의 이름 지정
# from_arrays()를 사용하여 MultiIndex 생성
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('rank', 'student', 'points'))
# MultiIndex 출력
print("The MultiIndex...\n", multiIndex)
# MultiIndex의 레벨 확인
print("\nThe levels in MultiIndex...\n", multiIndex.levels)
# swaplevel()을 사용하여 MultiIndex의 레벨 교환
# 첫 번째 매개변수: 교환할 첫 번째 인덱스 레벨
# 두 번째 매개변수: 교환할 두 번째 인덱스 레벨
print("\nSwap levels in MultiIndex...\n", multiIndex.swaplevel(0, 2))실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
The MultiIndex...
MultiIndex([(2, 'Peter', 50),
(4, 'Chris', 30),
(3, 'Andy', 40),
(1, 'Jacob', 70)],
names=['rank', 'student', 'points'])
The levels in MultiIndex...
[[1, 2, 3, 4], ['Andy', 'Chris', 'Jacob', 'Peter'], [30, 40, 50, 70]]
Swap levels in MultiIndex...
MultiIndex([(50, 'Peter', 2),
(30, 'Chris', 4),
(40, 'Andy', 3),
(70, 'Jacob', 1)],
names=['points', 'student', 'rank'])정리
실행 결과를 보면 원래 (rank, student, points) 순서였던 인덱스가 swaplevel(0, 2) 호출 이후 (points, student, rank) 순서로 변경된 것을 확인할 수 있습니다. 이처럼 swaplevel()은 계층형 인덱스의 레벨 순서를 유연하게 재배치할 때 매우 유용한 메서드입니다.