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

Python Pandas – MultiIndex에서 특정 단일 레벨만 새로 설정하는 방법

Pandas의 MultiIndex에서 하나의 특정 레벨만 새로 교체하고 싶다면 MultiIndex.set_levels() 메서드에 level 매개변수를 함께 사용하면 됩니다. 이 메서드는 전체 레벨을 바꾸지 않고도 원하는 위치의 레벨만 선택적으로 변경할 수 있어 매우 유용합니다.

기본 사용법

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

import pandas as pd

MultiIndex는 pandas 객체에서 사용되는 다중 레벨(계층형) 인덱스 객체입니다. 예제에 사용할 배열을 생성해 보겠습니다.

arrays = [[1, 2, 3, 4], ['John', 'Tim', 'Jacob', 'Chris']]

names 매개변수는 각 인덱스 레벨의 이름을 지정하며, from_arrays() 메서드를 사용하면 배열로부터 MultiIndex를 손쉽게 만들 수 있습니다.

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

이제 level 매개변수를 사용하여 첫 번째 레벨(level=0)만 새로운 값으로 교체합니다.

print("\nSet a new level in Multi-index...\n", multiIndex.set_levels(['p', 'q', 'r', 's'], level=0))

전체 예제 코드

지금까지의 과정을 하나의 코드로 정리하면 다음과 같습니다.

import pandas as pd

# MultiIndex는 pandas 객체를 위한 다중 레벨(계층형) 인덱스 객체입니다
# 배열 생성
arrays = [[1, 2, 3, 4], ['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)

# level 매개변수를 사용하여 첫 번째 레벨만 새 값으로 설정
print("\nSet a new level in Multi-index...\n", multiIndex.set_levels(['p', 'q', 'r', 's'], level=0))

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

The Multi-index...
MultiIndex([(1, 'John'),
            (2, 'Tim'),
            (3, 'Jacob'),
            (4, 'Chris')],
           names=['ranks', 'student'])

The levels in Multi-index...
    [[1, 2, 3, 4], ['Chris', 'Jacob', 'John', 'Tim']]

Set a new level in Multi-index...
MultiIndex([('p', 'John'),
            ('q', 'Tim'),
            ('r', 'Jacob'),
            ('s', 'Chris')],
           names=['ranks', 'student'])

핵심 포인트 정리

  • level 매개변수: 정수(0, 1, ...) 또는 레벨 이름('ranks' 등)을 사용하여 변경할 대상 레벨을 지정할 수 있습니다.
  • levels 속성: MultiIndex의 각 레벨은 내부적으로 정렬된 상태로 저장되므로, 출력 시 원래 입력 순서와 다르게 보일 수 있습니다.
  • inplace 옵션: 기본적으로 set_levels()는 새로운 MultiIndex 객체를 반환하지만, inplace=True로 설정하면 원본 객체를 직접 수정할 수 있습니다.

이처럼 set_levels() 메서드와 level 매개변수를 조합하면 계층형 인덱스 전체를 재생성하지 않고도 필요한 레벨만 효율적으로 교체할 수 있습니다.