판다스 (Pandas) (GroupBy)
2024. 8. 3. 17:17ㆍ프로그래밍 (확장)/Python-Pandas
판다스의 groupby 함수는 데이터를 그룹으로 묶어 요약 통계를 계산하는 기능을 제공한다. SQL의 GROUP BY 구문과 유사하다.
(참고: 예제 소스코드 ChatGPT로 생성 했습니다.)
기본 사용법
groupby 함수는 데이터를 특정 열을 기준으로 그룹화한 후, 각 그룹에 대해 요약 통계를 계산할 수 있다.
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, dropna=True)
- by: 그룹화할 열(또는 열들)의 이름, 배열, 또는 함수. 단일 열이나 여러 열의 이름을 문자열 또는 리스트 형태로 전달할 수 있습니다.
- axis: 그룹화할 축. 기본값은 0(행). 1(열)을 사용할 수도 있습니다.
- level: 다중 인덱스(MultiIndex)에서 그룹화할 레벨의 번호(또는 이름). 단일 레벨 또는 리스트로 여러 레벨을 지정할 수 있습니다.
- as_index: 그룹 키를 결과의 인덱스로 사용할지 여부. 기본값은 True. False로 설정하면 그룹 키를 인덱스 대신 열로 사용합니다.
- sort: 그룹 키에 따라 결과를 정렬할지 여부. 기본값은 True. False로 설정하면 데이터프레임의 순서대로 그룹화합니다.
- group_keys: 그룹화한 키를 결과에 포함할지 여부. 기본값은 True. 그룹화된 객체의 keys에 따라 결과가 구분됩니다.
- squeeze: 가능하다면 차원을 축소할지 여부. 기본값은 False. True로 설정하면 단일 행 또는 열이 있는 경우 차원을 축소합니다.
- observed: 범주형 데이터를 그룹화할 때 관찰된 값만 사용 여부. 기본값은 False. True로 설정하면 NaN 값을 무시하고 그룹화를 수행합니다.
- dropna: NaN 값을 가진 그룹을 무시할지 여부. 기본값은 True. False로 설정하면 NaN 값을 가진 그룹도 포함합니다.
참고 사항
- groupby는 그룹화한 결과를 사용하여 다양한 분석을 수행한다.
- agg 함수를 사용하면 한 번에 여러 집계 함수를 적용할 수 있다.
- filter 함수를 사용하면 특정 조건에 따라 그룹을 필터링할 수 있다.
예시 1:
데이터 프레임 생성
import pandas as pd
# 데이터 생성
data = {
'Department': ['Sales', 'Sales', 'Sales', 'HR', 'HR', 'IT', 'IT', 'IT'],
'Employee': ['Alice', 'Bob', 'Charlie', 'David', 'Edward', 'Frank', 'Grace', 'Hannah'],
'Salary': [50000, 60000, 70000, 40000, 45000, 55000, 60000, 65000]
}
df = pd.DataFrame(data)
print(df)
Department Employee Salary
0 Sales Alice 50000
1 Sales Bob 60000
2 Sales Charlie 70000
3 HR David 40000
4 HR Edward 45000
5 IT Frank 55000
6 IT Grace 60000
7 IT Hannah 65000
그룹화 및 요약 통계
# 부서별로 그룹화하여 급여 합계 계산
grouped = df.groupby('Department')
salary_sum = grouped['Salary'].sum()
print(salary_sum)
Department
HR 85000
IT 180000
Sales 180000
Name: Salary, dtype: int64
예시 2:
여러 집계용 합수들 사용
# 부서별로 그룹화하여 급여 합계와 평균 계산
salary_agg = grouped['Salary'].agg(['sum', 'mean', 'max', 'min'])
print(salary_agg)
sum mean max min
Department
HR 85000 42500.0 45000 40000
IT 180000 60000.0 65000 55000
Sales 180000 60000.0 70000 50000
예시 3:
그룹화한 데이터에 접근
# 그룹별 첫 번째 행 출력
first_entries = grouped.first()
print(first_entries)
# 그룹별 데이터프레임 접근
for name, group in grouped:
print(f'Group: {name}')
print(group)
Employee Salary
Department
HR David 40000
IT Frank 55000
Sales Alice 50000
Group: HR
Department Employee Salary
3 HR David 40000
4 HR Edward 45000
Group: IT
Department Employee Salary
5 IT Frank 55000
6 IT Grace 60000
7 IT Hannah 65000
Group: Sales
Department Employee Salary
0 Sales Alice 50000
1 Sales Bob 60000
2 Sales Charlie 70000
예시 4:
여러 열을 기준으로 그룹화
# 부서와 직원을 기준으로 그룹화하여 급여 합계 계산
grouped_multi = df.groupby(['Department', 'Employee'])
salary_sum_multi = grouped_multi['Salary'].sum()
print(salary_sum_multi)
Department Employee
HR David 40000
Edward 45000
IT Frank 55000
Grace 60000
Hannah 65000
Sales Alice 50000
Bob 60000
Charlie 70000
Name: Salary, dtype: int64
예시 5:
그룹별 필터링
# 그룹의 평균 급여가 60000 이상인 그룹만 필터링
filtered = grouped.filter(lambda x: x['Salary'].mean() >= 60000)
print(filtered)
Department Employee Salary
0 Sales Alice 50000
1 Sales Bob 60000
2 Sales Charlie 70000
5 IT Frank 55000
6 IT Grace 60000
7 IT Hannah 65000
참고: https://pandas.pydata.org/docs/
pandas documentation — pandas 2.2.2 documentation
API reference The reference guide contains a detailed description of the pandas API. The reference describes how the methods work and which parameters can be used. It assumes that you have an understanding of the key concepts.
pandas.pydata.org
'프로그래밍 (확장) > Python-Pandas' 카테고리의 다른 글
Pandas - 1. 소개와 설치 (0) | 2025.01.24 |
---|---|
판다스 (Pandas) (Pivot Table) (0) | 2024.08.03 |
판다스 (Pandas) (Pivot) (0) | 2024.08.03 |
판다스 (Pandas) (데이터 정제) (0) | 2024.08.03 |
판다스 (Pandas) (데이터 선택 및 필터링) (0) | 2024.08.02 |