반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- Tkinter
- Python
- numpy
- PANDAS
- Excel
- string
- SQL
- google apps script
- matplotlib
- 파이썬
- Apache
- Github
- Kotlin
- Mac
- c#
- math
- dataframe
- Java
- hive
- Google Excel
- django
- Redshift
- array
- PostgreSQL
- PySpark
- gas
- GIT
- Google Spreadsheet
- list
Archives
- Today
- Total
달나라 노트
Python Pandas : agg (열마다 다른 집계함수 적용) 본문
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
반응형
'Python > Python Pandas' 카테고리의 다른 글
| Python Pandas : map (0) | 2026.05.20 |
|---|---|
| Python Pandas : div (나눗셈) (0) | 2026.05.20 |
| Python Pandas : std() — 표준편차를 계산하는 메서드 (0) | 2026.05.14 |
| Python Pandas : Series .values vs .to_numpy() (0) | 2026.05.14 |
| Python Pandas : where & mask (값 필터링하여 바꾸기) (0) | 2026.05.12 |
Comments
