파이썬 기초문법

판다스 transform으로 그룹별 변환 적용하기(그룹별 최대값 / 최소값)

Family in August 2024. 6. 12. 08:28
반응형


판다스 transform으로 그룹별 변환 적용하기

판다스에서 groupby를 사용하면 데이터프레임을 그룹별로 나누어 연산을 수행할 수 있습니다. 이번에는 groupby와 함께 transform 메서드를 활용하여 그룹별로 변환을 적용하는 방법에 대해 알아보겠습니다.

transform이란?
------------

transform은 그룹 객체에서 호출할 수 있는 메서드입니다. 그룹별로 제공된 함수를 적용하고, 그 결과를 새로운 열에 할당합니다. 함수의 반환값은 그룹별로 구성되는 시리즈 혹은 데이터프레임입니다.

기본 사용법
--------

python
import pandas as pd
import numpy as np

df = pd.DataFrame({'group': list('aabbcc'), 
                   'value': np.random.randint(1, 100, 6)})

print("원본 데이터프레임:")
print(df)

# 그룹별 value 열 평균을 계산하여 새 열 추가
df['value_mean'] = df.groupby('group')['value'].transform('mean')

print("transform 적용 후:") 
print(df)



출력:

원본 데이터프레임:
  group  value
0     a     26
1     a     70
2     b     13
3     b     36
4     c     97
5     c     58

transform 적용 후:
  group  value  value_mean
0     a     26        48.0
1     a     70        48.0
2     b     13        24.5
3     b     36        24.5
4     c     97        77.5
5     c     58        77.5



함수 직접 전달하기
-------------

transform에 직접 함수를 전달할 수도 있습니다.

# 각 그룹의 value 열에서 최댓값 구하기
df['value_max'] = df.groupby('group')['value'].transform(lambda x: x.max())

print(df)


출력

  group  value  value_mean  value_max
0     a     26        48.0         70
1     a     70        48.0         70
2     b     13        24.5         36
3     b     36        24.5         36
4     c     97        77.5         97
5     c     58        77.5         97



transform과 다른 메서드 조합하기
-----------------------

transform은 groupby 객체의 다른 메서드와도 조합할 수 있습니다.

# 각 그룹에서 value가 평균보다 큰 행만 filter 후 transform 적용
res = df.groupby('group').transform('mean')[df['value'] > df.groupby('group')['value'].transform('mean')]
print(res)



출력:

0     NaN
1    70.0
3    36.0
4    97.0
5     NaN



이처럼 transform을 통해 그룹별 다양한 전처리와 변환을 손쉽게 적용할 수 있습니다. 데이터 분석 및 피처 엔지니어링 과정에서 transform의 활용도가 높습니다.

반응형