Python

[파이썬] 피벗 테이블 멀티 인덱스 해제

weweGH 2025. 4. 6. 09:00
반응형

피벗 테이블 멀티 인덱스 해제
피벗 테이블 멀티 인덱스 해제


피벗 테이블 멀티 인덱스 해제


들어가며


파이썬에서 pivot_table을 활용하여 피벗 테이블을 생성할 때, 멀티 인덱스를 제거하는 방법을 소개합니다. 컬럼을 수동으로 입력하는 방법도 있지만, 편리하고 깔끔하게 데이터프레임을 정리할 수 있습니다.


피벗 테이블 멀티 인덱스 해제


먼저 필요한 패키지인 pandas를 설치하고 import합니다.

# pip install pandas
import pandas as pd

weather_sample.csv
0.00MB


예제 데이터로 날짜별 지역별 강수량, 적설량 데이터를 사용하겠습니다.

df = pd.read_csv('weather_sample.csv', encoding='euc-kr')
df.head()

df
df


인덱스를 날짜로 설정하고, 지역별 강수량, 적설량이 나오도록 피벗 테이블을 생성하겠습니다.

df1 = df.pivot_table(index='SDATE', columns='REGION_NM', values=['강수량','적설량']).reset_index()
df1.head()

df1 pivot table
df1 pivot table


위에서 만든 피벗 테이블 df1의 컬럼을 출력하면, 다음과 같이 멀티 인덱스를 확인할 수 있습니다.

df1.columns

df1 multi index
df1 multi index


멀티 인덱스를 해제하는 방법은 다음과 같습니다. 컬럼명을 불러와서 길이를 기준으로 새로운 컬럼명을 설정합니다.

df2 = df.pivot_table(index='SDATE', columns='REGION_NM', values=['강수량','적설량']).reset_index()
df2.columns = ['_'.join([col for col in multi_col if len(col)>0]) for multi_col in df2.columns]
df2.head()

df2 pivot table
df2 pivot table

반응형

사용자 정의 함수를 작성하여 사용하면 더욱 편리합니다.

def flatten_mul_index(df):
        df.columns = ['_'.join([col for col in multi_col if len(col)>0]) 
                      for multi_col in df.columns]
        return df
#

df3 = df.pivot_table(index='SDATE', columns='REGION_NM', values=['강수량','적설량']).reset_index()
df3 = flatten_mul_index(df3)   
df3.head()

전체 코드


# pip install pandas
import pandas as pd


df = pd.read_csv('weather_sample.csv', encoding='euc-kr')
df.head()


# i) 
df2 = df.pivot_table(index='SDATE', columns='REGION_NM', values=['강수량','적설량']).reset_index()
df2.columns = ['_'.join([col for col in multi_col if len(col)>0]) for multi_col in df2.columns]
df2.head()


# ii) 사용자 정의 함수 사용
def flatten_mul_index(df):
        df.columns = ['_'.join([col for col in multi_col if len(col)>0]) 
                      for multi_col in df.columns]
        return df



df3 = df.pivot_table(index='SDATE', columns='REGION_NM', values=['강수량','적설량']).reset_index()
df3 = flatten_mul_index(df3)   
df3.head()

반응형