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

Python Pandas – MultiIndex를 레벨 값을 포함한 튜플 인덱스로 변환하는 방법

개요

Pandas에서 MultiIndex(다중 레벨 인덱스)를 각 레벨의 값을 하나로 담은 튜플 형태의 단일 Index로 변환하려면 MultiIndex.to_flat_index() 메서드를 사용합니다. 이 메서드는 계층형 인덱스를 평탄화(flat)하여 일반적인 인덱스 객체로 되돌려 줍니다.

라이브러리 임포트

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

import pandas as pd

배열 생성하기

MultiIndex는 pandas 객체를 위한 다중 레벨, 즉 계층형(hierarchical) 인덱스 객체입니다. 인덱스로 사용할 배열을 먼저 만들어 보겠습니다.

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

위 배열은 첫 번째 레벨에는 숫자 등수, 두 번째 레벨에는 학생 이름이 들어가도록 구성되어 있습니다.

MultiIndex 생성하기

from_arrays() 메서드를 사용하면 배열 목록으로부터 MultiIndex를 만들 수 있습니다. 이때 names 매개변수를 지정하면 각 인덱스 레벨에 이름을 부여할 수 있습니다.

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

MultiIndex 변환하기

이제 to_flat_index() 메서드를 호출하여 MultiIndex를 레벨 값을 포함하는 튜플 인덱스로 변환합니다.

print("\nConverting a MultiIndex to an Index of Tuples containing the level values...\n", multiIndex.to_flat_index())

전체 예제 코드

지금까지의 내용을 하나로 합친 전체 코드는 다음과 같습니다.

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)

# MultiIndex를 튜플 인덱스로 변환
print("\nConverting a MultiIndex to an Index of Tuples containing the level values...\n", multiIndex.to_flat_index())

실행 결과

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

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

Converting a MultiIndex to an Index of Tuples containing the level values...
   Index([(1, 'John'), (2, 'Tim'), (3, 'Jacob'), (4, 'Chris')], dtype='object')

정리

to_flat_index()를 사용하면 ('ranks', 'student') 두 레벨로 구성된 MultiIndex가 (1, 'John'), (2, 'Tim')처럼 각 레벨의 값을 묶은 튜플 하나로 이루어진 단일 Index 객체로 변환됩니다. 이 방식은 DataFrame의 인덱스를 CSV 파일로 저장하거나, 계층형 인덱스가 필요 없는 단순한 구조로 바꿀 때 유용하게 활용할 수 있습니다.