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

Python Pandas – DataFrame에서 MultiIndex(다중 인덱스) 생성하는 방법

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() 메서드를 활용하면 계층적 인덱스를 몇 줄의 코드로 간편하게 구성할 수 있습니다.