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()
기능을 잘 활용하면 대량의 데이터를 보다 효율적으로 분석할 수 있습니다.
'Python Pandas' 카테고리의 다른 글
Pandas 데이터 프레임 결합 - merge()와 concat() (0) | 2025.02.20 |
---|---|
Pandas Pivot Table 활용 (pivot_table()) (0) | 2025.02.19 |
Pandas 다중 인덱스 사용 (set_index(), reset_index()) (0) | 2025.02.17 |
Pandas에서 조건부 필터링 (Conditional Filtering) (0) | 2025.02.16 |
Pandas에서 행과 열 선택: loc[], iloc[], at[], iat[] (0) | 2025.02.15 |