Python Pandas

Pandas 그룹화(groupby()) 및 집계 함수(agg(), mean(), sum())

PyExplorer 2025. 2. 18. 09:50
728x90

Pandas 그룹화(groupby()) 및 집계 함수(agg(), mean(), sum())

데이터 분석에서 데이터를 그룹화하고 특정 연산을 적용하는 것은 매우 중요한 과정입니다. Pandas의 groupby() 메서드를 활용하면 데이터를 특정 기준에 따라 그룹화하고 다양한 집계 함수를 적용할 수 있습니다. 이번 포스팅에서는 groupby()의 기본 개념과 함께 agg(), mean(), sum() 등의 집계 함수를 활용하는 방법을 살펴보겠습니다.


1. groupby()란?

groupby()는 데이터프레임에서 특정 열의 값을 기준으로 데이터를 그룹화하는 기능을 제공합니다. 그룹화한 후에는 각 그룹별로 다양한 연산을 수행할 수 있습니다.

groupby() 기본 사용법

import pandas as pd

# 샘플 데이터 생성
data = {
    '부서': ['영업', '영업', '개발', '개발', '디자인', '디자인', '영업'],
    '이름': ['김철수', '이영희', '박지성', '손흥민', '이강인', '정우영', '한지민'],
    '연봉': [5000, 5200, 5800, 6200, 4700, 4900, 5100]
}

df = pd.DataFrame(data)

# 부서별 그룹화
grouped = df.groupby('부서')
print(grouped)

위 코드를 실행하면 groupby() 객체가 생성되며, 이후 다양한 연산을 수행할 수 있습니다.


2. 집계 함수 (Aggregation Functions)

2.1 mean() - 평균 구하기

그룹별 연봉의 평균을 계산하는 예제입니다.

# 부서별 평균 연봉 계산
mean_salary = df.groupby('부서')['연봉'].mean()
print(mean_salary)

출력 결과:

부서
개발     6000.0
디자인   4800.0
영업     5100.0
Name: 연봉, dtype: float64

부서별 평균 연봉이 계산된 것을 확인할 수 있습니다.


2.2 sum() - 합계 구하기

각 부서별 연봉의 총합을 계산해 보겠습니다.

# 부서별 연봉 총합
sum_salary = df.groupby('부서')['연봉'].sum()
print(sum_salary)

출력 결과:

부서
개발    12000
디자인   9600
영업    15300
Name: 연봉, dtype: int64

부서별 연봉 총합이 올바르게 계산된 것을 확인할 수 있습니다.


2.3 agg() - 여러 개의 집계 함수 적용하기

agg() 메서드를 사용하면 여러 개의 집계 함수를 한 번에 적용할 수 있습니다.

# 부서별 연봉 평균과 총합 계산
agg_salary = df.groupby('부서')['연봉'].agg(['mean', 'sum'])
print(agg_salary)

출력 결과:

           mean    sum
부서                  
개발   6000.0  12000
디자인  4800.0   9600
영업   5100.0  15300

각 그룹별로 평균과 총합을 동시에 계산할 수 있어 더욱 유용합니다.


3. 다중 열 그룹화 및 집계

여러 개의 열을 기준으로 그룹화할 수도 있습니다.

# 부서와 이름을 기준으로 그룹화 후 연봉 평균 계산
grouped_multi = df.groupby(['부서', '이름'])['연봉'].mean()
print(grouped_multi)

출력 결과:

부서   이름   
개발   박지성    5800.0
     손흥민    6200.0
디자인 이강인    4700.0
     정우영    4900.0
영업   김철수    5000.0
     이영희    5200.0
     한지민    5100.0
Name: 연봉, dtype: float64

위 예제에서는 부서이름을 기준으로 그룹화한 후 연봉의 평균을 계산하였습니다.


4. reset_index()로 그룹화 결과를 데이터프레임으로 변환

groupby()를 수행하면 결과가 Series 또는 DataFrame 형태로 반환될 수 있습니다. reset_index()를 사용하면 결과를 일반적인 데이터프레임 형태로 변환할 수 있습니다.

# 데이터프레임 형태로 변환
agg_salary_df = df.groupby('부서')['연봉'].agg(['mean', 'sum']).reset_index()
print(agg_salary_df)

출력 결과:

    부서    mean    sum
0   개발  6000.0  12000
1  디자인  4800.0   9600
2   영업  5100.0  15300

reset_index()를 적용하면 기존 인덱스를 초기화하고, 데이터프레임 형식으로 변환할 수 있습니다.


5. 특정 그룹 필터링하기

그룹화한 데이터에서 특정 조건을 만족하는 그룹만 필터링할 수도 있습니다. 예를 들어, 연봉 평균이 5000 이상인 부서만 추출해 보겠습니다.

# 평균 연봉이 5000 이상인 부서 필터링
filtered = df.groupby('부서')['연봉'].mean().reset_index()
filtered = filtered[filtered['연봉'] >= 5000]
print(filtered)

출력 결과:

    부서     연봉
0   개발  6000.0
1   영업  5100.0

평균 연봉이 5000 이상인 부서만 남은 것을 확인할 수 있습니다.


6. 정리

이번 포스팅에서는 Pandas의 groupby()를 활용하여 데이터를 그룹화하고, 다양한 집계 함수를 적용하는 방법을 살펴보았습니다.

  • groupby()는 데이터를 특정 열을 기준으로 그룹화하는 기능을 제공합니다.
  • mean(), sum() 등의 집계 함수를 활용하여 그룹별 평균 및 합계를 계산할 수 있습니다.
  • agg()를 사용하면 여러 개의 집계 함수를 한 번에 적용할 수 있습니다.
  • reset_index()를 활용하면 그룹화 결과를 일반적인 데이터프레임 형식으로 변환할 수 있습니다.
  • 특정 조건을 만족하는 그룹만 필터링할 수도 있습니다.

Pandas의 groupby() 기능을 잘 활용하면 대량의 데이터를 보다 효율적으로 분석할 수 있습니다.

728x90