Skip to main content

그룹핑

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()

퀴즈

사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.

Q&A