[Python] Pandas를 활용해 GroupBy 로 집계 하기
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
- [Pandas 공식문서] - pandas.DataFrame.groupby
- [Pandas 0.23.1 문서] - pandas.core.groupby.DataFrameGroupBy.agg
- [데잇걸즈2] Pandas 10분 완성 - 7. Grouping(그룹화)
개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다 :)
댓글남기기