본문 바로가기

Python/Data analysis

[Python] Data Analysis - DataFrame - groupby

groupby 함수는 다양한 옵션 및 기능이 있지만 여기서는 기본적인 기능에 대해서만 알아보겠습니다.

 

 

df
----------------------------------------------
	테마	종목명	PER	PBR
0	2차전지(생산)	SK이노베이션	10.19	1.29
1	해운	팬오션	21.23	0.95
2	시스템반도체	티엘아이	35.97	1.12
3	해운	HMM	21.52	3.20
4	시스템반도체	아이에이	37.32	3.55
5	2차전지(생산)	LG화학	83.06	3.75

df1 = df[df["테마"] == "2차전지(생산)"]
df2 = df[df["테마"] == "해운"]
df3 = df[df["테마"] == "시스템반도체"]

df1
----------------------------------------------
	테마	종목명	PER	PBR
0	2차전지(생산)	SK이노베이션	10.19	1.29
5	2차전지(생산)	LG화학	83.06	3.75

df2
----------------------------------------------
	테마	종목명	PER	PBR
1	해운	팬오션	21.23	0.95
3	해운	HMM	21.52	3.20

df3
----------------------------------------------
	테마	종목명	PER	PBR
2	시스템반도체	티엘아이	35.97	1.12
4	시스템반도체	아이에이	37.32	3.55

mean1 = df1["PER"].mean()
mean2 = df2["PER"].mean()
mean3 = df3["PER"].mean()

import pandas as pd 
data = [mean1, mean2, mean3]
index = ["2차전지(생산)", "해운", "시스템반도체"]
s = pd.Series(data=data, index=index)
s
----------------------------------------------
2차전지(생산)    46.625
시스템반도체      36.645
해운          21.375
dtype: float64

# 평균연산을 적용할 수 없는 "종목명" 컴럼은 자동으로 제거됨
# df.groupby("테마")[["PER", "PBR"]].mean()
df.groupby("테마").mean()
----------------------------------------------
	PER	PBR
테마		
2차전지(생산)	46.625	2.520
시스템반도체	36.645	2.335
해운	21.375	2.075

 

 

기본적인 groupby 함수 사용 예시.

 

df.groupby("테마").get_group("2차전지(생산)")
----------------------------------------------
	테마	종목명	PER	PBR
0	2차전지(생산)	SK이노베이션	10.19	1.29
5	2차전지(생산)	LG화학	83.06	3.75

# 특정필드만 추출해서 "테마"로 그룹핑.
temp = df[["테마", "PER", "PBR"]].groupby("테마").get_group("2차전지(생산)")
temp
----------------------------------------------
	테마	PER	PBR
0	2차전지(생산)	10.19	1.29
5	2차전지(생산)	83.06	3.75

# "테마"로 그룹핑 후 특정필드만 추출.
temp = df.groupby("테마")[ ["테마", "PER", "PBR"] ].get_group("2차전지(생산)")
(temp)
----------------------------------------------
	테마	PER	PBR
0	2차전지(생산)	10.19	1.29
5	2차전지(생산)	83.06	3.75

 

 

아래의 조건은 같은 결과를 출력합니다.

평균연산을 적용할 수 없는 "종목명" 컴럼은 자동으로 제거됨

 

df.groupby("테마")[["PER", "PBR"]].mean()
----------------------------------------------
	PER	PBR
테마		
2차전지(생산)	46.625	2.520
시스템반도체	36.645	2.335
해운	21.375	2.075


# 평균연산을 적용할 수 없는 "종목명" 컴럼은 자동으로 제거됨
df.groupby("테마").mean()
----------------------------------------------
	PER	PBR
테마		
2차전지(생산)	46.625	2.520
시스템반도체	36.645	2.335
해운	21.375	2.075

 

 

agg 메서드를 이용하면 다양한 함수를 사용 가능하다. 컴럼의 이름을 key, 적용할 함수의 이름은 value 로 전달한다.

numpy 를 이용하면 표준편차와 분산도 쉽게 계산이 가능하다.

 

df
----------------------------------------------
	테마		종목명		PER	PBR
0	2차전지(생산)	SK이노베이션	10.19	1.29
1	해운		팬오션		21.23	0.95
2	시스템반도체	티엘아이		35.97	1.12
3	해운		HMM		21.52	3.20
4	시스템반도체	아이에이		37.32	3.55
5	2차전지(생산)	LG화학		83.06	3.75


df.groupby("테마").agg({"PER": max, "PBR": min})
----------------------------------------------
		PER	PBR
테마		
2차전지(생산)	83.06	1.29
시스템반도체	37.32	1.12
해운		21.52	0.95


# 표준편차와 분산 계산
import numpy as np
df.groupby("테마").agg({"PER": [min, max], "PBR": [np.std, np.var]})
----------------------------------------------
		PER		PBR
		min	max	std		var
테마				
2차전지(생산)	10.19	83.06	1.739483	3.02580
시스템반도체	35.97	37.32	1.718269	2.95245
해운		21.23	21.52	1.590990	2.53125