달나라 노트

Python Pandas : agg (열마다 다른 집계함수 적용) 본문

Python/Python Pandas

Python Pandas : agg (열마다 다른 집계함수 적용)

CosmosProject 2026. 5. 20. 21:50
728x90
반응형

Pandas agg() — 열마다 다른 집계 함수를 한 번에 적용하는 메서드

agg()는 DataFrame이나 GroupBy 객체에 집계 함수를 적용하는 메서드입니다. 단일 함수는 물론, 열마다 다른 함수를 적용하거나 여러 함수를 한 번에 실행할 수 있습니다.

기본 문법

DataFrame.agg(func, axis=0)
GroupBy.agg(func)
func 형태 예시 결과
문자열 agg('sum') Series
리스트 agg(['sum', 'mean']) DataFrame (함수명이 행)
딕셔너리 agg({'A': 'sum', 'B': 'mean'}) DataFrame (열별 다른 함수)
Named agg agg(결과명=('열', '함수')) 깔끔한 DataFrame

1. 단일 함수

import pandas as pd

df = pd.DataFrame({
    '매출': [100, 200, 150, 300],
    '수량': [10,  20,  15,  30]
})

df.agg('sum')
# 매출    750
# 수량     75
# dtype: int64

2. 여러 함수를 리스트로

df.agg(['sum', 'mean', 'max'])
#        매출     수량
# sum   750.0   75.00
# mean  187.5   18.75
# max   300.0   30.00

3. 열마다 다른 함수를 딕셔너리로

df.agg({
    '매출': ['sum', 'mean'],
    '수량': 'max'
})
#        매출    수량
# sum   750.0   NaN
# mean  187.5   NaN
# max    NaN   30.0

4. groupby + agg — 가장 많이 쓰는 패턴

sales = pd.DataFrame({
    '지역':  ['서울', '서울', '부산', '부산', '서울'],
    '매출':  [100, 200, 150, 300, 120],
    '수량':  [10,  20,  15,  30,  12]
})

sales.groupby('지역').agg({
    '매출': ['sum', 'mean'],
    '수량': 'sum'
})
#        매출              수량
#         sum    mean      sum
# 지역
# 부산    450  225.0       45
# 서울    420  140.0       42

5. Named Aggregation — 결과 컬럼명 직접 지정

멀티인덱스 컬럼 없이 깔끔한 결과를 얻을 수 있어 실무에서 가장 선호하는 패턴입니다.

sales.groupby('지역').agg(
    매출합계=('매출', 'sum'),
    평균매출=('매출', 'mean'),
    총수량  =('수량', 'sum')
)
#        매출합계  평균매출  총수량
# 지역
# 부산      450   225.0     45
# 서울      420   140.0     42

6. 커스텀 함수 적용

def range_val(x):
    return x.max() - x.min()

sales.groupby('지역').agg(
    매출범위=('매출', range_val),
    매출합계=('매출', 'sum')
)
#        매출범위  매출합계
# 지역
# 부산      150      450
# 서울      100      420

응용 사례 1 — 데이터 품질 점검

df = pd.DataFrame({
    '나이':  [25, None, 30, 22, None],
    '점수':  [80, 90,  None, 70, 85]
})

df.agg(
    건수   =('나이', 'count'),
    결측수  =('나이', lambda x: x.isna().sum()),
    평균나이 =('나이', 'mean'),
    평균점수 =('점수', 'mean')
)
#          나이    점수
# 건수      3.0    4.0
# 결측수    2.0    1.0
# 평균나이  25.7   NaN
# 평균점수   NaN  81.25

응용 사례 2 — 기간별 매출 리포트

report = sales_df.groupby('월').agg(
    총매출  =('매출', 'sum'),
    평균매출 =('매출', 'mean'),
    최대매출 =('매출', 'max'),
    거래건수 =('매출', 'count')
).round(1)
#     총매출  평균매출  최대매출  거래건수
# 월
# 1   1200   240.0    500      5
# 2   1450   290.0    620      5
# 3   1380   276.0    480      5

응용 사례 3 — 다중 그룹 집계

result = sales.groupby(['지역', '카테고리']).agg(
    매출합계=('매출', 'sum'),
    평균단가=('단가', 'mean'),
    판매량  =('수량', 'sum')
)
#               매출합계  평균단가  판매량
# 지역  카테고리
# 부산  식품        350     8.5     42
#      전자        480    24.0     20
# 서울  식품        290     7.2     40
#      전자        620    31.0     20

자주 쓰는 집계 함수 목록

문자열 의미
'sum' 합계
'mean' 평균
'median' 중앙값
'min' / 'max' 최솟값 / 최댓값
'count' 비결측 건수
'nunique' 고유값 수
'std' / 'var' 표준편차 / 분산
'first' / 'last' 첫 번째 / 마지막 값
핵심 직관: agg는 "여러 집계를 한 번에 정의하는 선언문"입니다. groupby 이후 Named Aggregation 패턴(결과명=('열', '함수'))이 가독성과 편의성 모두 가장 좋습니다.
728x90
반응형
Comments