Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Pandas – MultiIndex 레벨 재정렬 방법(reorder_levels)

Pandas에서 MultiIndex의 레벨 순서를 변경하려면 MultiIndex.reorder_levels() 메서드를 사용하면 됩니다. 이때 order 매개변수에 원하는 레벨 순서를 지정하여 계층 구조를 자유롭게 재배치할 수 있습니다.

필요한 라이브러리 불러오기

먼저 필요한 라이브러리를 임포트합니다.

import pandas as pd

MultiIndex란?

MultiIndex는 pandas 객체에서 사용되는 다중 레벨(계층적) 인덱스 객체입니다. 하나의 인덱스에 여러 개의 수준을 두어 복잡한 데이터를 체계적으로 관리할 수 있도록 도와줍니다.

예제에서 사용할 배열을 생성해 보겠습니다.

arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob'], [50, 30, 40, 70]]

MultiIndex 생성하기

names 매개변수는 각 인덱스 레벨의 이름을 지정하는 역할을 합니다. 그리고 from_arrays() 메서드를 사용하면 배열로부터 MultiIndex를 생성할 수 있습니다.

multiIndex = pd.MultiIndex.from_arrays(arrays, names=('rank', 'student', 'points'))

레벨 재정렬하기

이제 MultiIndex의 레벨을 재정렬해 보겠습니다. order 매개변수에 원하는 레벨의 순서를 리스트 형태로 전달하면 됩니다. 아래 예제에서는 기존 순서(rank, student, points)를 points → rank → student 순으로 변경합니다.

print("\nReorder levels in MultiIndex...\n", multiIndex.reorder_levels(order=[2, 0, 1]))

전체 예제 코드

다음은 지금까지 설명한 내용을 모두 포함한 전체 코드입니다.

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)

# MultiIndex의 레벨 재정렬
# order 매개변수로 레벨 순서를 지정합니다
print("\nReorder levels in MultiIndex...\n", multiIndex.reorder_levels(order=[2, 0, 1]))

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

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]]

Reorder levels in MultiIndex...
MultiIndex([(50, 2, 'Peter'),
            (30, 4, 'Chris'),
            (40, 3, 'Andy'),
            (70, 1, 'Jacob')],
            names=['points', 'rank', 'student'])

정리

실행 결과를 보면, 원래 rank → student → points 순서였던 인덱스가 order=[2, 0, 1] 옵션에 따라 points → rank → student 순서로 성공적으로 재배열된 것을 확인할 수 있습니다. 이처럼 reorder_levels() 메서드를 활용하면 MultiIndex의 계층 구조를 데이터 분석 목적에 맞게 손쉽게 조정할 수 있습니다.