본문 바로가기
판다스/판다스 팁

[pandas] 기존 데이터 프레임의 상위 2행을 멀티 인덱스로 설정하기

by 김판다t 2024. 5. 22.

 

판다스에서 알아두면 유용한 질문과 답변입니다.

 

 

질문 출처:

 

https://stackoverflow.com/questions/78382107/creating-a-multi-index-column-from-an-existing-dataframe

 

인풋 생성

 

# 인풋 데이터 프레임 생성 코드
import pandas as pd
import numpy as np

data1 = [['symbol', 'appl', 'goog', 'None', 'msft', 'None', 'None', 'None', 'None'],
         ['date', 'close', 'close', 'volume', 'close', 'open', 'high', 'low'],
         ['1999-01-10', 100, 101, 10000, 102, 103, 104, 105],
         ['1999-01-11', 200, 201, 20001, 202, 203, 204, 205]]
df = pd.DataFrame(data1)

 

df

 

 

 

질문 : 기존 데이터 프레임의 상위 2행을 멀티 인덱스로 설정하기

 

 

기존 데이터 프레임의 상위 2행을 멀티 인덱스로 설정해야 합니다.

첫 번째는 appl에 대해 close 열로 구성되어야 합니다.

두 번째는 goog에 대해 close, volume 열로 구성되어야 합니다.

마지막은 msft에 대해 open, high, low 열로 구성되어야 합니다.

 

 

 

 

답변

 

from_frame을 활용해 기존 데이터 프레임으로 멀티 인덱스를 생성하세요.

# df의 결측값을 채워서 상위 2행으로 멀티 인덱스를 생성
idx = pd.MultiIndex.from_frame(
    df.ffill(axis=1).iloc[:2, 1:].T, names=['symbol', 'ohlcv'])

# 결과 생성
out = (df.iloc[2:, 1:]                  # df의 3행부터 모든 행, 2열부터 모든 열을 선택
         .set_index(df.iloc[2:, 0])     # df에서 첫 번째 열을 인덱스로 설정
         .rename_axis('date')           # 인덱스명을 'date'로 설정
         .set_axis(idx, axis=1)         # 앞서 생성한 멀티 인덱스 idx를 컬럼즈로 설정
)

 

 

out:

 

 

 

 


유튜브에서 판다스 강의 중입니다

 

https://www.youtube.com/@KimPandas