3 분 소요

14. 그룹화

동일한 값을 가진 것들끼리 합쳐서 통계 또는 평균 등의 값을 계산하기 위해 사용

import pandas as pd
df = pd.read_excel('score.xlsx', index_col='지원번호')
df
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
1번 채치수 북산고 197 90 85 100 95 85 Python
2번 정대만 북산고 184 40 35 50 55 25 Java
3번 송태섭 북산고 168 80 75 70 80 75 Javascript
4번 서태웅 북산고 187 40 60 70 75 80 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
6번 변덕규 능남고 202 80 100 95 85 80 C
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
8번 윤대협 능남고 190 100 85 90 95 95 C#
df.groupby('학교') 
df
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
1번 채치수 북산고 197 90 85 100 95 85 Python
2번 정대만 북산고 184 40 35 50 55 25 Java
3번 송태섭 북산고 168 80 75 70 80 75 Javascript
4번 서태웅 북산고 187 40 60 70 75 80 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
6번 변덕규 능남고 202 80 100 95 85 80 C
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
8번 윤대협 능남고 190 100 85 90 95 95 C#
df.groupby('학교').get_group('북산고')
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
1번 채치수 북산고 197 90 85 100 95 85 Python
2번 정대만 북산고 184 40 35 50 55 25 Java
3번 송태섭 북산고 168 80 75 70 80 75 Javascript
4번 서태웅 북산고 187 40 60 70 75 80 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
df.groupby('학교').get_group('능남고')
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
6번 변덕규 능남고 202 80 100 95 85 80 C
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
8번 윤대협 능남고 190 100 85 90 95 95 C#
df.groupby('학교').mean() # 계산 가능한 데이터들의 평균값
국어 영어 수학 과학 사회
학교
능남고 193.333333 78.333333 83.333333 76.666667 73.333333 70.0
북산고 184.800000 53.000000 55.000000 60.000000 68.000000 55.0
df.groupby('학교').size() # 각 그룹의 크기
학교
능남고    3
북산고    5
dtype: int64
df.groupby('학교').size()['능남고'] # 학교로 그룹화를 한 뒤에 능남고에 해당하는 데이터의 수
3
df.groupby('학교')['키'].mean() # 학교로 그룹화를 한 뒤에 키의 평균 데이터
학교
능남고    193.333333
북산고    184.800000
Name: 키, dtype: float64
df.groupby('학교')[['국어','영어','수학']].mean() # 학교로 그룹화를 한 뒤에 국어,영어,수학 평균 데이터
국어 영어 수학
학교
능남고 78.333333 83.333333 76.666667
북산고 53.000000 55.000000 60.000000
df['학년'] = [3, 3, 2, 1, 1, 3, 2, 2] # 학년 Column 추가
df
이름 학교 국어 영어 수학 과학 사회 SW특기 학년
지원번호
1번 채치수 북산고 197 90 85 100 95 85 Python 3
2번 정대만 북산고 184 40 35 50 55 25 Java 3
3번 송태섭 북산고 168 80 75 70 80 75 Javascript 2
4번 서태웅 북산고 187 40 60 70 75 80 NaN 1
5번 강백호 북산고 188 15 20 10 35 10 NaN 1
6번 변덕규 능남고 202 80 100 95 85 80 C 3
7번 황태산 능남고 188 55 65 45 40 35 PYTHON 2
8번 윤대협 능남고 190 100 85 90 95 95 C# 2
df.groupby(['학교','학년']).mean() # 학교별, 학년별 평균 데이터
국어 영어 수학 과학 사회
학교 학년
능남고 2 189.0 77.5 75.0 67.5 67.5 65.0
3 202.0 80.0 100.0 95.0 85.0 80.0
북산고 1 187.5 27.5 40.0 40.0 55.0 45.0
2 168.0 80.0 75.0 70.0 80.0 75.0
3 190.5 65.0 60.0 75.0 75.0 55.0
df.groupby('학년').mean() # 학년별 평균 데이터
국어 영어 수학 과학 사회
학년
1 187.500000 27.500000 40.000000 40.000000 55.000000 45.000000
2 182.000000 78.333333 75.000000 68.333333 71.666667 68.333333
3 194.333333 70.000000 73.333333 81.666667 78.333333 63.333333
df.groupby('학년').mean().sort_values('키',ascending=False)
국어 영어 수학 과학 사회
학년
3 194.333333 70.000000 73.333333 81.666667 78.333333 63.333333
1 187.500000 27.500000 40.000000 40.000000 55.000000 45.000000
2 182.000000 78.333333 75.000000 68.333333 71.666667 68.333333
df.groupby(['학교','학년']).sum()
국어 영어 수학 과학 사회
학교 학년
능남고 2 378 155 150 135 135 130
3 202 80 100 95 85 80
북산고 1 375 55 80 80 110 90
2 168 80 75 70 80 75
3 381 130 120 150 150 110
df.groupby('학교')[['이름','SW특기']].count() # 학교로 그룹화를 한 뒤에 각 학교별 SW특기 데이터의 수를 가져옴
이름 SW특기
학교
능남고 3 3
북산고 5 3
school = df.groupby('학교')
school['학년'].value_counts() # 학교로 그룹화를 한 뒤에 학년별 학생 수를 가져옴.
학교   학년
능남고  2     2
     3     1
북산고  1     2
     3     2
     2     1
Name: 학년, dtype: int64
school['학년'].value_counts().loc['북산고'] # 학교로 그룹화를 한 뒤에 북산고에 대해서 학년별 학생 수를 가져옴.
학년
1    2
3    2
2    1
Name: 학년, dtype: int64
school['학년'].value_counts().loc['능남고'] # 학교로 그룹화를 한 뒤에 능남고에 대해서 학년별 학생 수를 가져옴
학년
2    2
3    1
Name: 학년, dtype: int64
school['학년'].value_counts(normalize=True).loc['북산고'] # 학생들의 수 데이터를 퍼센트로 비교하여 가져옴
학년
1    0.4
3    0.4
2    0.2
Name: 학년, dtype: float64

댓글남기기