본문 바로가기

Data

[python] 멀티인덱스 정리, pd.wide_to_long

위와 같은 멀티인덱스 + wide form의 자료를 아래와 같은 깔끔한 long form으로 정리하는 법

 

1.  멀티인덱스 확인

df = pd.read_csv("고령인구비율_시도_시_군_구__20210518193531.csv", encoding="cp949", header=[0,1])
df.columns

공공기관의 데이터 경우 encoding = "cp949"로 읽어줘야 깨짐없이 제대로 읽을 수 있다.

 

컬럼형태가 멀티인덱스 형식으로 되어있음을 확인

이제 멀티컬럼을 하나의 컬럼으로 바꿔보겠다.

ex) ( '2000', '고령인구비율' ) -> 고령인구비율_2000

 

2. 멀티인덱스를 하나의 컬럼명으로 바꾸기

# 멀티 인덱스 순서 바꾸기 
col_list = []
for i in df.columns:
        a = i[0]
        b = i[1]
        a,b = b,a
        col_list.append((a,b))
        
# '_'로 두 인덱스 조인
col = list(map(lambda x: '_'.join(x), col_list))
col

df.columns = col # 데이터 컬럼 변경

 

3. 데이터를 wide form 에서 long form으로 변경하기

df["id"] = df.index 
df = pd.wide_to_long(df,["고령인구비율<br>(A÷B×100) (%)","65세이상인구<br>(A) (명)","전체인구<br>(B) (명)"] 
                ,i="id", j="year", sep="_")