그룹핑
group by (데이터 집계)
- 데이터 분석의 핵심: 데이터를 특정 기준으로 "그룹화"하여 요약
- "A반의 평균 점수", "도시별 인구수", "성별 평균 연봉" 등
- Pandas의
groupby(): 데이터를 특정 그룹으로 나눔
pp = pd.read_excel('people.xlsx')
grouped = pp.groupby('성별') # 성별에 따라 그룹으로 분할
grouped['점수'].mean() # 그룹별 점수 평균
집계 함수
.sum(): 그룹별 합계.mean(): 그룹별 평균.count(): 그룹별 개수 (NaN 포함).size(): 그룹별 개수 (NaN 포함, 더 빠름).max(),.min(): 그룹별 최대/최소값
다중 컬럼으로 GroupBy
- 여러 개의 기준을 리스트(
[])로 묶어 전달 - 예: '도시'별, '성별' 평균 점수
pp.groupby(['도시', '성별'])['점수'].mean()
- 결과: '도시'와 '성별'이 다중 인덱스(MultiIndex)로 생성됨
- 결과를 표 형태로 만들려면 컬럼도 리스트로
pp.groupby(['도시', '성별'])[['점수']].mean()
그룹화 후 인덱스 초기화
groupby의 결과는 기준 컬럼이 인덱스가 됨- 인덱스로 만들지 않으려면
as_index=False사용
pp.groupby('도시', as_index=False)['나이'].mean()
- 만들어진 인덱스를 리셋할 수도 있음
df.groupby('도시')['나이'].mean().reset_index()
여러 집계 함수 동시 적용
- 한 번에 여러 통계치를 보고 싶을 때
.agg()메소드에 함수 이름을 리스트([])로 전달- 도시별 나이의 '평균'과 '최대값'
pp.groupby('도시')['나이'].agg(['mean', 'max'])
컬럼별로 다른 집계 함수 적용
.agg()에 딕셔너리({})를 전달{ '컬럼명': '함수명', ... }
- 도시별로 '나이'는 평균(mean)을 '점수'는 합계(sum)를 계산
st = pp.groupby('도시').agg({
'나이': 'mean',
'점수': 'sum'
})
- 전체 결과 보기
st
멀티 인덱스
- 나이의 평균만 보기
st[('나이', 'mean')]
- 대구의 나이 평균 보기
st.loc['대구', ('나이', 'mean')]
그룹별 변환
agg: 그룹별 요약 (행 개수가 줄어듦)transform(): 그룹별 연산 후, 원본 인덱스와 동일한 크기로 반환- 원본 데이터프레임에 그룹별 통계치를 추가할 때 유용
- '도시'별 평균 나이를 계산 (결과가 원본 행 개수와 동일)
pp['도시_평균_나이'] = pp.groupby('도시')['나이'].transform('mean')
pp
groupby와 value_counts의 관계
.value_counts(): 특정 컬럼의 고유값 개수를 세는 기능.groupby().size()와 사실상 동일한 작업- '도시'별 데이터 개수 세기 (방법 1)
pp['도시'].value_counts()
- '도시'별 데이터 개수 세기 (방법 2)
pp.groupby('도시').size()
퀴즈
사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.