Python Library/Pandas

[Pandas - Python] Pandas 라이브러리와 그룹화

바보1 2022. 2. 8. 18:18

기본 데이터

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#

1. groupby 함수

 

df.groupby('학교')
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x00000234D4A7D6D0>

이렇게 '학교'를 기준으로 그룹화를 하면 밑에처럼 나옵니다.

 

이때, 원하시는 값에 따라 함수를 적어주시면 됩니다. 

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('학교').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

또한, groupby를 한 곳에서 column도 뽑아올 수 있습니다.

 

df.groupby('학교')['키'].mean() # groupby해서 키를 먼저 가져온 뒤 평균을 계산함
학교
능남고    193.333333
북산고    184.800000
Name: 키, dtype: float64

이때, '학년' 정보를 추가해보겠습니다.

 

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

이렇게 학교별로 나눈 후, 학년별로 평균 데이터가 나옵니다.

 

그 외에는 딱히 특별한 게 없네요..

 

아무튼 제 생각에 groupby를 하면 새로운 DataFrame이 생성되는게 아니라 그냥 DataFrameGroupBy라는 객체가 생성되는 것 같습니다. 이 점에 유의하시면 될 것 같습니다.

 

감사합니다.

 

지적 환영합니다.

 

 

 

 

참고 : 나도코딩