오식랜드
[python] pandas 그룹화 본문
반응형
출처 : 나도코딩 https://www.youtube.com/watch?v=PjhlUzp_cU0&t=10533
동일한 값을 가진 것들끼리 합쳐서 통계 또는 평균 등의 값을 계산하기 위해 진행한다
import pandas as pd
# excel 파일 열기
df = pd.read_excel('score.xlsx', index_col='지원번호')
print(df)
그룹화
- groupby : 그룹화
df.groupby('학교')
- get_group(’그룹명’) 그룹 선택
print(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
- 계산 가능한 데이터들의 평균값
print(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
- 그룹별 데이터들의 갯수
# 그룹별 데이터(row) 갯수
print(df.groupby('학교').size())
학교
능남고 3
북산고 5
dtype: int64
- 그룹 중 하나의 값만 불러오기
print(df.groupby('학교').size()['능남고'])
# 3
- 하나의 데이터만 평균값 구하기
print(df.groupby('학교')['키'].mean())
- 일부 데이터만 평균값 구하기 : list 삽입
print(df.groupby('학교')[['국어','영어','수학']].mean())
학교별, 학년별로 그룹핑
데이터에 학년을 추가해보자
df['학년'] = [3,3,2,1,1,3,2,2]
이름 학교 키 국어 영어 수학 과학 사회 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
그리고 학교 내에서 학년별로 그룹핑을 해보자
list로 두개의 column제목을 넣으면 된다
print(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
이번엔 학년별로만 그룹핑을 해보자
print(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
- 정렬
이 상태에서 ‘키’순서로 정렬하고 싶으면 sort_values를 이용해주면 된다
print(df.groupby('학년').mean().sort_values('키'))
키 국어 영어 수학 과학 사회
학년
2 182.000000 78.333333 75.000000 68.333333 71.666667 68.333333
1 187.500000 27.500000 40.000000 40.000000 55.000000 45.000000
3 194.333333 70.000000 73.333333 81.666667 78.333333 63.333333
- 총 합 구하기
print(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
- 갯수 세기
SW특기가 있는 학생 세기
print(df.groupby('학교')['SW특기'].count())
학교
능남고 3
북산고 3
Name: SW특기, dtype: int64
- 학생 수 대비 SW특기가 있는 학생 수 한눈에 보기
print(df.groupby('학교')[['이름', 'SW특기']].count())
이름 SW특기
학교
능남고 3 3
북산고 5 3
- 학교로 그룹핑 한 후 학년별 학생 수 세기
school = df.groupby('학교')
print(school['학년'].value_counts())
학교 학년
능남고 2 2
3 1
북산고 1 2
3 2
2 1
Name: 학년, dtype: int64
- 하나의 학교의 학년별 학생 수 세기
print(school['학년'].value_counts().loc['북산고'])
학년
1 2
3 2
2 1
- 퍼센테이지로 구하기 : normalize
school['학년'].value_counts(normalize=True).loc['북산고']
학년
1 0.4
3 0.4
2 0.2
반응형
'dev-log > python' 카테고리의 다른 글
[python] Django 가상서버 생성 및 진입 (0) | 2023.01.30 |
---|---|
[python] pandas 퀴즈 (0) | 2023.01.17 |
[python] pandas 데이터에 함수 적용 (0) | 2023.01.17 |
[python] pandas 데이터 수정 (0) | 2023.01.17 |
[python] pandas 데이터 정렬 (0) | 2023.01.17 |
Comments