판다스 (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