Pandas의 MultiIndex.from_frame() 메서드를 사용하면 기존 DataFrame을 그대로 활용해 다중 인덱스(MultiIndex)를 손쉽게 만들 수 있습니다. 이 메서드는 DataFrame의 각 열을 인덱스 레벨로 변환해 주기 때문에, 여러 조건으로 데이터를 조회하거나 그룹화할 때 매우 유용합니다.
이번 글에서는 예제를 통해 DataFrame에서 다중 인덱스를 생성하는 과정을 단계별로 살펴보겠습니다.
1단계: 리스트로 구성된 딕셔너리 만들기
먼저 차량 정보와 구매 날짜를 담은 딕셔너리를 준비합니다.
d = {'Car': ['BMW', 'Lexus', 'Audi', 'Mercedes', 'Jaguar', 'Bentley'],
'Date_of_purchase': ['2020-10-10', '2020-10-12', '2020-10-17', '2020-10-16', '2020-10-19', '2020-10-22']}2단계: 딕셔너리로 DataFrame 생성하기
위에서 만든 딕셔너리를 pd.DataFrame()에 전달하여 DataFrame을 생성합니다.
dataFrame = pd.DataFrame(d)
3단계: from_frame()으로 다중 인덱스 생성하기
이제 pd.MultiIndex.from_frame() 메서드에 DataFrame을 전달하면, 각 행이 튜플 형태의 복합 인덱스로 변환됩니다.
print(pd.MultiIndex.from_frame(dataFrame))
전체 예제 코드
import pandas as pd
# 리스트로 구성된 딕셔너리
d = {'Car': ['BMW', 'Lexus', 'Audi', 'Mercedes', 'Jaguar', 'Bentley'],
'Date_of_purchase': ['2020-10-10', '2020-10-12', '2020-10-17', '2020-10-16', '2020-10-19', '2020-10-22']}
# 딕셔너리로 DataFrame 생성
dataFrame = pd.DataFrame(d)
print("DataFrame...\n", dataFrame)
# 다중 인덱스 생성
print(pd.MultiIndex.from_frame(dataFrame))실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
DataFrame...
Car Date_of_purchase
0 BMW 2020-10-10
1 Lexus 2020-10-12
2 Audi 2020-10-17
3 Mercedes 2020-10-16
4 Jaguar 2020-10-19
5 Bentley 2020-10-22
MultiIndex([('BMW','2020-10-10'),
('Lexus','2020-10-12'),
('Audi','2020-10-17'),
('Mercedes','2020-10-16'),
('Jaguar','2020-10-19'),
('Bentley','2020-10-22')],
names=['Car', 'Date_of_purchase'])정리
MultiIndex.from_frame()은 DataFrame의 열 이름을 자동으로 인덱스 레벨의 이름(names)으로 사용합니다. 위 예제에서는 'Car'와 'Date_of_purchase' 두 개의 레벨을 가진 다중 인덱스가 생성되었습니다.
만약 특정 열만 인덱스로 사용하고 싶다면 keys 또는 level 파라미터를 활용하면 되고, 인덱스 이름을 직접 지정하고 싶다면 names 파라미터를 사용하면 됩니다. 이처럼 from_frame() 메서드를 활용하면 계층적 인덱스를 몇 줄의 코드로 간편하게 구성할 수 있습니다.