Pandas에서 제공하는 GroupBy를 사용하여 집계 하기


그룹화 (GroupBy)

그룹화는 다음 단계 중 하나 이상을 포함하는 프로세스이다.

  • 몇 가지 기준에 따라 데이터를 그룹으로 분할 (splitting)
  • 각 그룹에 독립적으로 기능을 적용 (applying)
  • 결과를 데이터 구조로 결합 (combining)


적용하며 배워보는 GroupBy

사용할 수 있는 집계 메소드(method) 는 다음과 같다.

  • count, sum
  • min, max
  • mean, median
  • std, var, quantile
  • first, last

데이터 정보

  • Dataset : KOSIS 의료기관종별 환자 수 (2014 ~ 2017)
  • Dataset 미리보기 ( 아래 코드의 결과물 )
  • 👉 데이터 보러가기
# 데이터 로드
df = pd.read_excel(file_name)

# 컬럼을 구성하고 있는 연월 정보를 행으로 녹이기
df = df[df["의료기관종별(1)"]!="의료기관종별(1)"]
df = df.melt(id_vars="의료기관종별(1)", var_name="연도", value_name="환자수")

# 결측치 제거 및 환자 수 데이터 타입 str -> float 
df = df[df["환자수"] != "-"]
df["환자수"] = df["환자수"].astype("float")
df.head()
  의료기관종별(1) 연도 환자수
0 전체 2014 9105050.0
1 상급종합병원 2014 1615801.0
2 종합병원 2014 2929371.0
3 병원 2014 2751873.0
4 요양병원 2014 267349.0

특정 컬럼에 대해 집계 메소드 사용

(1) 의료기관종별, 전체 환자 수

df.groupby(by="의료기관종별(1)").sum()
  환자수
의료기관종별(1)  
병원 4.739752e+08
보건소 3.340283e+07
보건의료원 4.168446e+06
보건지소 2.224900e+07
보건진료소 2.761705e+07
상급종합병원 2.935339e+08
요양병원 2.645382e+07
의원 3.802586e+09
전체 6.512185e+09
종합병원 5.096768e+08
치과병원 2.853760e+07
치과의원 4.880480e+08
한방병원 4.046266e+07
한의원 7.614742e+08

(2) 의료기관종별, 최대 환자 수

df.groupby(by="의료기관종별(1)")[["환자수"]].max()
  환자수  
의료기관종별(1)    
병원 65060724.0  
보건소 5934208.0  
보건의료원 638740.0  
보건지소 3949565.0  
보건진료소 4543564.0  
상급종합병원 41275591.0  
요양병원 3158237.0  
의원 568961314.0  
전체 962975033.0  
종합병원 72005122.0  
치과병원 4613219.0  
치과의원 76061268.0  
한방병원 6798600.0  
한의원 113727539.0  


Reference


개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다 :)

댓글남기기