멀티 인덱스(MultiIndex)
하나 이상의 인덱스를 사용하여 데이터프레임의 행과 열을 구조화하는 방법
다차원 데이터를 보다 효율적으로 관리하고 분석할 수 있게 해준다.
set_index()로 멀티 인덱스 설정
#멀티 인덱스 생성
import pandas as pd
#예시 프레임 생성
data = {
'도시' = ['서울', '서울', '부산', '부산'],
'년도' = [2021, 2022, 2021, 2022],
'인구수' = [970000, 9720000, 3400000, 3450000]
}
df = pd.DataFrame(data)
#'도시'와 '년도'를 멀티 인덱스로 설정
df_multi_index = df.set_index(['도시','년도'])
df_multi_index
도시와 년도가 인덱스로 설정되어, 데이터가 더 구조화된 형태로 보임
pd.MultiIndex.from_tuple()로 멀티 인덱스 생성
- from_tuples()를 사용해 튜플로 구성된 멀티 인덱스 생성가능
#멀티 인덱스를 튜플로 직접 생성
index = pd.MultiIndex.from_tuples([('서울', 2021), ('서울', 2022), ('부산', 2021), ('부산', 2022)], names = ['도시', '년도'])
#데이터프레임에 적용
df_multi_index = pd.DataFrame({'인구수' : [99700000, 9720000, 3400000, 3459999]}, index = index)
df_multi_index
멀티 인덱스 데이터 접근하기
loc[]을 사용한 데이터 접근 -> 멀티 인덱스에서 특정 데이터 선택 가능
#특정 인덱스의 데이터 선택
df_multi_index.loc['서울']
하위 레벨까지 지정하여 데이터를 더 구체적으로 접근 가능
#'서울'의 2021년 데이터 선택
df_multi_index.loc[('서울', 2021)]
슬라이싱(Slicing)으로 데이터 접근
멀티 인덱스는 슬라이싱을 통해 특정 구간의 데이터를 쉽게 선택할 수 있음
#부산의 모든 데이터를 선택
df_multi_index = df_multi_index.sort_index()
df_multi_index.loc['부산':'부산']
Pandas는
단일 값 조회 시, 해당 인덱스 레벨을 자동으로 제거하는 성질을 가짐
슬라이싱 조회는 범위를 지정하기 때문에, 인덱스 레벨을 그대로 유지
xs()를 사용한 멀티 인덱스 교차 선택
특정 레벨에서 데이터를 선택하거나, 레벨을 넘어서 데이터를 선택할 때 유용
#'도시'레벨에서 '서울'데이터를 선택
df_multi_index.xs('서울', level ='도시')
복합 인덱스(MultiIndex)활용
인덱스 정렬 및 정렬된 상태 확인
멀티 인덱스를 사용한 데이터프레임은 정렬된 상태로 관리하는 것이 일반적 - sort_index()로 인덱스 정렬
#멀티 인덱스 정렬
df_sorted = df_multi_index.sort_index()
df_sorted
unstack(), stack()으로 인덱스 변환
unstack() : 멀티 인덱스를 열로 변환
stack() : 열을 인덱스로 변환
#멀티 인덱스의 열을 인덱스로 변환
df_unstacked = df_multi_index.unstack(level = '년도')
df_unstacked
#다시 인덱스로 변환(stack)
df_stacked = df_unstacked.stack(future_stack = True)
df_stacked
stack()메서드 구현이 바뀐단다.
FutureWarning이라 지금은 결과가 나온다.
나중에는 stack()을 호출할 때 future_stack = True를 명시적으로 전달해줘야한다는 듯
Warning꼴보기 싫어서 위의 예시코드처럼 future_stack = True 라고 적어주고 돌렸다.
Warrning이 사라졌다. 좋다.
멀티 인덱스의 응용
그룹화(Grouping)와 함께 사용
멀티 인덱스는 그룹화와 함께 사용할 때 더 강력해짐 - 그룹화한 데이터를 멀티 인덱스로 변환하여 복잡한 분석 수행
#데이터프레임 생성
data = {
'도시' : ['서울', '서울', '부산', '부산', '서울', '부산'],
'년도' : [2021, 2022, 2021, 2022, 2021, 2022],
'인구수' : [9700000, 9720000, 3400000, 3450000, 9800000, 3500000],
'소득' : [60000, 62000, 45000, 46000, 63000, 47000]}
df = pd.DataFrame(data)
#'도시'와 '년도'를 기준으로 그룹화하여 평균 계산
grouped_df = df.groupby(['도시', '년도']).mean()
grouped_df
예시코드에 사용된 데이터값은 임의의 숫자일 뿐 사실이 아님
'Python to AI' 카테고리의 다른 글
Python - Pandas(데이터 프레임 구조 재조정) (3) | 2024.12.18 |
---|---|
Machine learning Vol.2 (7) | 2024.12.17 |
Machine learning (6) | 2024.12.16 |
Python - 객체 탐색과 속성 관리 (4) | 2024.12.15 |
Python - Pandas(데이터 전처리: Encoding, Embedding) (4) | 2024.12.13 |