개요
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 파일로 저장하거나, 계층형 인덱스가 필요 없는 단순한 구조로 바꿀 때 유용하게 활용할 수 있습니다.