서로-어깨동무-뒷모습
그룹

판다스는 데이터 요약을 위해 groupby 함수를 제공합니다. 하나의 칼럼을 원하는 방법으로 요약하기에 좋지만, 여러 개의 칼럼을 서로 다른 기준으로 요약하려고 하면 막상 방법이 잘 떠오르지 않습니다. 파이썬 판다스 groupby 여러 개 기준으로 쉽게 요약하는 방법을 알아보았습니다.

 

 

연습을 위해 kospi 200 데이터를 판다스 데이터 프레임으로 가져왔습니다.

 

import pandas as pd

df= pd.read_html('https://stock.infoking.site/kospi200info/')[0]
df = df[df['PER']!='-']
df['PER'] = df['PER'].astype(float)
df['PBR'] = df['PBR'].astype(float)

 

 

1. 하나의 칼럼 요약값 구하기

보통 칼럼명을 입력하고, 요약 함수를 넣어서 많이 사용합니다. 칼럼명을 넣지 않으면, 모든 칼럼에 대해서 요약 값을 구합니다. 업종별로 PER최솟값을 구해봤습니다. 직관적이고 사용하기 좋지만, 여러 요약 값을 구할 수 없다는 단점이 있습니다.

 

df.groupby('업종명')['PER'].mean()

 

 

2. 여러 개의 요약값 구하기

agg함수를 이용하면 됩니다. 리스트로 필요한 요약값을 구할 수 있는 함수를 입력합니다. 문자열로 입력해야 하는 것이 특이합니다. 여러 개의 칼럼에 다수의 요약 함수를 적용할 수 있습니다. 하지만 칼럼 별로 다른 요약 값을 적용할 수 없다는 단점이 있습니다.

 

df.groupby('업종명')['PER'].agg(['min', 'mean', 'max'])

 

 

3. 칼럼별로 다른 요약값 구하기

이 때는 agg함수에 딕셔너리 자료형으로 입력합니다. 칼럼명에 필요한 요약값을 키와 값 형태로 넣습니다.

 

df.groupby('업종명').agg({"PER":"mean", "PBR":"max"})

 

 

4. 여러 칼럼, 여러 요약값 만들기

딕셔너리 자료형의 값에 필요한 요약값을 리스트 자료형으로 넣습니다. 가장 자유도가 높게 요약값을 구할 수 있는 방법입니다.

 

df.groupby('업종명').agg({"PER":['min', 'mean', 'max']
                        ,"PBR":['min', 'mean', 'max']})

 

 

5. apply함수 이용하기

apply함수를 이용하면 그룹별로 원하는 계산을 할 수 있습니다. 예를 업종별로 최소 최대 변환을 한다면, 아래와 같이 할 수 있지요.

df.groupby('업종명')['PER'].apply(lambda x:(x - x.min())/(x.max()-x.min()))

 

 

파이썬 판다스 groupby 여러 개 기준으로 쉽게 요약하는 방법을 알아보았습니다. 가장 자유도가 높은 건 네 번째 방법입니다. 원하는 칼럼에 원하는 요약 값을 구할 수 있습니다. 하지만 매번 저렇게 사용하기는 번거롭습니다. 다른 방법도 알아둬서 원하는 수준의 방법을 이용하는 것이 좋겠습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기