본문 바로가기

Python/Data analysis

[Python] Data Analysis - DataFrame - multi-column

이번에는 멀티컬럼에 대해서 알아보겠습니다.

멀티컬럼은 멀티인덱스와 구조만 다릅니다.

 

from pandas import DataFrame

data = [
    [100, 900, 800, 700],
    [1200, 1400, 900, 800]
]

columns = [
    ['영업이익', '영업이익', '당기순이익', '당기순이익'],
    ['컨센서스', '잠정치', '컨센서스', '잠정치']
]

index = ["2020/06", "2020/09"]
df = DataFrame(data=data, index=index, columns=columns)
df
------------------------------------------
	영업이익		당기순이익
	컨센서스	잠정치	컨센서스	잠정치
2020/06	100	900	800	700
2020/09	1200	1400	900	800

 

컬럼의 개수가 많지 않으면 직접 지정가능하지만, 컬럼의 개수가 많아지면 모든 조합을 하드코딩으로 입력하지 않고,

판다스의 MultiIndex 의 from_product 함수는 입력된 리스트로 데이터의 조합을 만들수 있다.

 

from pandas import DataFrame
import pandas as pd

data = [
    [100, 900, 800, 700],
    [1200, 1400, 900, 800]
]

index = ["2020/06", "2020/09"]


level_0 = ["영업이익", "당기순이익"]
level_1 = ["컨센서스", "잠정치"]

idx = pd.MultiIndex.from_product([level_0, level_1])
df = DataFrame(data=data, index=index, columns=idx)

df
------------------------------------------------------
	영업이익		당기순이익
	컨센서스	잠정치	컨센서스	잠정치
2020/06	100	900	800	700
2020/09	1200	1400	900	800

 

인덱싱 하는 방법

 

df["영업이익"]
--------------------------
	컨센서스	잠정치
2020/06	100	900
2020/09	1200	1400


df[[("영업이익", "컨센서스")]]
--------------------------
	영업이익
	컨센서스
2020/06	100
2020/09	1200

df.loc["2020/06", "영업이익"]
--------------------------
컨센서스    100
잠정치     900
Name: 2020/06, dtype: int64


df.loc[["2020/06"], ["영업이익"]]
--------------------------
	영업이익
	컨센서스	잠정치
2020/06	100	900


df.loc["2020/06", ("영업이익", "컨센서스")]
--------------------------
100


df.loc["2020/06", (slice(None), "컨센서스")]
--------------------------
영업이익   컨센서스    100
당기순이익  컨센서스    800
Name: 2020/06, dtype: int64


df.loc[["2020/06"], (slice(None), "컨센서스")]
--------------------------
	영업이익	당기순이익
	컨센서스	컨센서스
2020/06	100	800

 

행/열(x축/y축) 변경

 

df.T
--------------------------------
		2020/06	2020/09
영업이익	컨센서스	100	1200
	잠정치	900	1400
당기순이익	컨센서스	800	900
	잠정치	700	800


df.transpose()
--------------------------------
		2020/06	2020/09
영업이익	컨센서스	100	1200
	잠정치	900	1400
당기순이익	컨센서스	800	900
	잠정치	700	800