Pandas에서 이름과 지역처럼 두 개 이상의 정보를 담은 튜플 형태의 다중 인덱스(MultiIndex)를 사용하다 보면, 이를 하나의 문자열로 합쳐 단일 인덱스로 변환해야 할 때가 있습니다. 이 글에서는 Pandas와 NumPy를 활용해 다중 인덱스를 언더스코어(_)로 연결된 단일 인덱스로 바꾸는 과정을 단계별로 살펴봅니다.
핵심 원리는 간단합니다. 인덱스 객체에 map() 메서드를 적용하고, 문자열 조인 함수인 '_'.join을 전달하면 각 튜플의 요소들이 하나의 문자열로 연결됩니다.
1단계: 필요한 라이브러리 불러오기
먼저 Pandas와 NumPy 라이브러리를 각각 별칭 pd, np로 가져옵니다.
import pandas as pd
import numpy as np
2단계: 튜플 값을 담은 Pandas Series 생성
(이름, 지역) 형태의 튜플 리스트로 Series를 만듭니다. 이 튜플들이 곧 다중 인덱스의 재료가 됩니다.
d = pd.Series([('Jacob', 'North'), ('Ami', 'East'), ('Ami', 'West'),
('Scarlett', 'South'), ('Jacob', 'West'), ('Scarlett', 'North')])
3단계: NumPy arange()로 값 생성 후 다중 인덱스 적용
NumPy의 arange() 메서드로 1부터 6까지의 정수 값을 만들고, 앞서 준비한 튜플 Series를 인덱스로 지정합니다.
dataFrame = pd.Series(np.arange(1, 7), index=d)
4단계: map()과 join()으로 인덱스 연결하기
map('_'.join)을 호출하면 ('Jacob', 'North') 같은 튜플이 Jacob_North처럼 하나의 문자열 인덱스로 변환됩니다.
dataMap = dataFrame.index.map('_'.join)
전체 예제 코드
import pandas as pd
import numpy as np
# 튜플 값을 담은 pandas Series 생성
d = pd.Series([('Jacob', 'North'), ('Ami', 'East'), ('Ami', 'West'),
('Scarlett', 'South'), ('Jacob', 'West'), ('Scarlett', 'North')])
# 다중 인덱스를 가진 Series 생성
dataFrame = pd.Series(np.arange(1, 7), index=d)
# map과 join으로 인덱스 연결
dataMap = dataFrame.index.map('_'.join)
print("\n매핑 결과:\n", dataMap)
실행 결과
매핑 결과:
Index(['Jacob_North', 'Ami_East', 'Ami_West', 'Scarlett_South',
'Jacob_West', 'Scarlett_North'], dtype='object')
결과 해석
출력을 보면 각 튜플 인덱스가 언더스코어로 연결된 단일 문자열로 변환된 것을 확인할 수 있습니다. 예를 들어 ('Jacob', 'North')는 Jacob_North가 되었습니다.
변환된 인덱스를 실제 Series에 적용하려면 다음과 같이 대입하면 됩니다.
dataFrame.index = dataMap
print(dataFrame)
이렇게 하면 다중 인덱스를 가진 Series가 깔끔한 단일 인덱스 구조로 정리되어, 이후 그룹화·필터링·시각화 등의 작업을 더 편하게 수행할 수 있습니다.