본문 바로가기
파이썬(Python)

데이터프레임-transform() 활용하기

by 즐거운코딩 2025. 8. 18.
반응형

데이터 분석을 위한 데이터 가공에서 평균, 최대, 최소, 정규화 등 다양한 요구사항에 맞는 작업을 해야할 경우가 있습니다.

방법은 여러가지가 있겠지만 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() → 그룹별 결과를 원래 데이터 크기에 맞게 확장해서 반환 (행 수 유지)
  • 실무에서: 그룹별 평균, 합계, 비율 계산, 정규화 등에 자주 활용

 

반응형