반응형
데이터 분석을 위한 데이터 가공에서 평균, 최대, 최소, 정규화 등 다양한 요구사항에 맞는 작업을 해야할 경우가 있습니다.
방법은 여러가지가 있겠지만 groupby 와 transform 을 활용하면 좀 더 쉽게 작업할 수 있어서 몇가지 예시를 들어 보겠습니다.
👉 그룹별 계산된 값을 원래 행(row) 개수만큼 되돌려주는 기능을 합니다.
transform()은 원본 크기를 유지하면서 새로운 계산 컬럼을 만들어줄 때 유용합니다.
1. 기본 예제
import pandas as pd
df = pd.DataFrame({
"부서": ["영업", "영업", "영업", "개발", "개발", "개발"],
"이름": ["A", "B", "C", "D", "E", "F"],
"급여": [500, 600, 550, 800, 750, 900]
})
print(df)
출력:
부서 이름 급여
0 영업 A 500
1 영업 B 600
2 영업 C 550
3 개발 D 800
4 개발 E 750
5 개발 F 900
2. groupby().transform() 사용
예: 부서별 급여 평균을 각 행에 붙이고 싶을 때:
df["부서별평균급여"] = df.groupby("부서")["급여"].transform("mean")
print(df)
출력:
부서 이름 급여 부서별평균급여
0 영업 A 500 550.0
1 영업 B 600 550.0
2 영업 C 550 550.0
3 개발 D 800 816.7
4 개발 E 750 816.7
5 개발 F 900 816.7
👉 transform()은 원래 행 크기를 유지하면서 "각 행이 속한 그룹의 값"을 채워줍니다.
3. 여러 연산 동시에 적용
여러 개의 집계를 동시에 새 컬럼으로 추가 가능:
df["부서별최소급여"] = df.groupby("부서")["급여"].transform("min")
df["부서별최대급여"] = df.groupby("부서")["급여"].transform("max")
print(df)
출력:
부서 이름 급여 부서별평균급여 부서별최소급여 부서별최대급여
0 영업 A 500 550.0 500 600
1 영업 B 600 550.0 500 600
2 영업 C 550 550.0 500 600
3 개발 D 800 816.7 750 900
4 개발 E 750 816.7 750 900
5 개발 F 900 816.7 750 900
4. 실무 활용 예시
예: 정규화 / 비율 계산
부서별 급여 합계 대비 개인 급여 비율:
df["부서별총급여"] = df.groupby("부서")["급여"].transform("sum")
df["급여비율"] = df["급여"] / df["부서별총급여"]
print(df)
출력:
부서 이름 급여 부서별총급여 급여비율
0 영업 A 500 1650 0.3030
1 영업 B 600 1650 0.3636
2 영업 C 550 1650 0.3333
3 개발 D 800 2450 0.3265
4 개발 E 750 2450 0.3061
5 개발 F 900 2450 0.3673
✅ 정리
- transform() → 그룹별 결과를 원래 데이터 크기에 맞게 확장해서 반환 (행 수 유지)
- 실무에서: 그룹별 평균, 합계, 비율 계산, 정규화 등에 자주 활용
반응형
'파이썬(Python)' 카테고리의 다른 글
데이터프레임-특정필드의 데이터타입이 float를 int 로 변경하고자 할 때 NA 로 되어 있는 경우 오류 해결 (0) | 2025.08.18 |
---|---|
파이썬-데이터프레임 변환 melt, pivot 함수 사용하기 (2) | 2025.08.17 |
파이썬-피봇테이블(pivot table) NaN, 다중컬럼 처리하기 (1) | 2025.08.17 |
파이썬-데이터프레임 데이터 필터링하기 (4) | 2025.08.14 |
파이썬-날짜데이터 포맷 변경하기 (4) | 2025.08.13 |