📍 그룹화
: 동일한 값을 가진 것들끼리 합쳐서 통계 또는 평균 등의 값을 계산하기 위해 사용
✅ 엑셀로 열기
: pd.read_excel('파일명.xlsx', index_col='column')
In [1]:
import pandas as pd
df = pd.read_excel('score.xlsx', index_col='지원번호') # index 설정
df
Out[1]:
✅ 그룹화 후 필터링
: df.groupby('column').get_group('value')
In [2]:
df.groupby('학교')
Out[2]:
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x13d88e710>
In [3]:
df.groupby('학교').get_group('북산고')
Out[3]:
✅ 그룹화 후 그룹별 행 갯수
: df.groupby('column').size()
In [4]:
df.groupby('학교').size()
Out[4]:
학교
능남고 3
북산고 5
dtype: int64
In [5]:
df.groupby('학교').size()['능남고']
Out[5]:
3
✅ 그룹화 후 평균값
: df.groupby('column').mean()
In [6]:
# 계산 가능한 데이터의 평균값
df.groupby('학교').mean(numeric_only=True)
Out[6]:
: df.groupby('column')[column_list].mean()
In [7]:
# 학교로 그룹화 한 뒤 키의 평균 데이터
df.groupby('학교')['키'].mean()
Out[7]:
학교
능남고 193.333333
북산고 184.800000
Name: 키, dtype: float64
In [8]:
# 학교로 그룹화 한 뒤 국어, 영어, 수학 평균 데이터
df.groupby('학교')[['국어', '영어', '수학']].mean()
Out[8]:
: df.groupby([column_list]).mean()
In [9]:
df['학년'] = [3, 3, 2, 1, 1, 3, 2, 2] # 학년 column 추가
df
Out[9]
In [10]:
# 학교별, 학년별 평균 데이터
df.groupby(['학교', '학년']).mean(numeric_only=True)
Out[10]:
: df.groupby('column').mean().sort_values('column')
In [11]:
# 학년으로 그룹화 한 뒤 키를 기준으로 오름차순 정렬
df.groupby('학년').mean(numeric_only=True).sort_values('키')
Out[11]:
In [12]:
# 학년으로 그룹화 한 뒤 키를 기준으로 내림차순 정렬
df.groupby('학년').mean(numeric_only=True).sort_values('키', ascending=False)
Out[12]:
✅ 그룹화 후 합계
: df.groupby('column').sum()
In [13]:
# 학교, 학년으로 그룹화 한 뒤 각 데이터의 합계
df.groupby(['학교', '학년']).sum(numeric_only=True)
Out[13]:
✅ 그룹화 후 갯수
: df.groupby('column').count()
In [14]:
# 학교로 그룹화 한 뒤 이름, SW 특기 데이터 수
df.groupby('학교')[['이름', 'SW특기']].count()
Out[14]:
✅ 그룹화 후 데이터갯수
: df.groupby('column').value_counts(normalize=True/False)
In [15]:
# 학교로 그룹화 한 뒤 학년별 학생 수
school = df.groupby('학교')
school['학년'].value_counts()
Out[15]:
학교 학년
능남고 2 2
3 1
북산고 1 2
3 2
2 1
Name: count, dtype: int64
In [16]:
# 학교로 그룹화 한 뒤 북산고의 학년별 학생 수
school['학년'].value_counts().loc['북산고']
Out[16]:
학년
1 2
3 2
2 1
Name: count, dtype: int64
In [17]:
# 학교로 그룹화 한 뒤 학생수 데이터를 퍼센트로 비교
school['학년'].value_counts(normalize=True).loc['북산고']
Out[17]:
학년
1 0.4
3 0.4
2 0.2
Name: proportion, dtype: float64
✅ 피벗테이블
: df.pivot_table(index, columns, values)
In [18]:
import seaborn as sns
df = sns.load_dataset('titanic')
df.head()
Out[18]:
In [19]:
df.pivot_table(index='sex', values='survived')
Out[19]:
In [20]:
df.pivot_table(columns='sex', values='survived')
Out[20]:
In [21]:
df.pivot_table(index=['sex', 'pclass'], values='survived')
Out[21]:
In [22]:
df.pivot_table(index='sex', columns='pclass', values='survived')
Out[22]:
In [23]:
df.pivot_table(index='sex', columns='pclass', values='survived', aggfunc=['sum', 'mean'])
Out[23]:
참고 : 나도코딩 파이썬 코딩 무료 강의 (활용편5) - 데이터 분석 및 시각화, 이 영상 하나로 끝내세요
'Pandas' 카테고리의 다른 글
[Pandas / 시각화] 판다스 matplitlib기본 - 한글폰트설정, title, 축, 범례 (1) | 2024.01.15 |
---|---|
[Pandas / 기초] 판다스 데이터병합 - concat, merge (0) | 2024.01.11 |
[Pandas / 기초] 판다스 데이터수정 - replace, rename, lower, apply, lambda (1) | 2024.01.10 |
[Pandas / 기초] 판다스 데이터추가, 삭제 - loc, drop, datetime, date_range, to_datetime (0) | 2024.01.10 |
[Pandas / 기초] 판다스 데이터정렬 - sort_values, sort_index (0) | 2024.01.10 |