Python

[pandas] transform 함수로 데이터 변환하기

루루23 2024. 12. 11. 01:09
반응형

pandas.DataFrame.transform은 데이터프레임을 변환할 때 매우 유용한 메서드입니다. 이 메서드는 데이터를 열 또는 행 단위로 변환하며, 원본 데이터프레임과 동일한 크기를 가진 결과를 반환해야 합니다. 이 글에서는 transform의 개념, 활용 예시, 주요 매개변수 등을 다룹니다.


pandas.DataFrame.transform

DataFrame.transform(func, axis=0, *args, **kwargs)

데이터프레임의 각 열 또는 행에 대해 변환 함수를 적용하여 동일한 크기의 데이터프레임을 반환

  • 변환된 결과는 원본 데이터프레임과 동일한 크기
  • 열(column) 또는 행(row) 단위로 변환 수행
  • 그룹화(groupby)와 함께 자주 사용
  • 다양한 입력 유형(function, str, list-like, dict-like) 지원

 

Parameters:

1. func : 데이터를 변환하는 함수

  • 함수(Function): 데이터프레임의 열이나 행에 직접 적용할 수 있는 사용자 정의 함수
  • 문자열(String): 문자열로 함수 이름 지정 가능 > 예: 'sqrt', 'exp'.
  • 리스트(List-like): 여러 함수를 리스트로 전달하여 순차적으로 적용 > 예: [np.exp, 'sqrt']
  • 사전(Dictionary-like): 열 또는 행을 기준으로 서로 다른 함수 지정 가능 > 예: {'A': 'sqrt', 'B': lambda x: x * 2}

2.2. axis (default 0 또는 'index') : 함수 적용할 축을 결정

  • 0 또는 'index' (기본값): 열 단위로 함수 적용
  • 1 또는 'columns': 행 단위로 함수 적용

2.3. *args와 **kwargs : 함수에 전달할 추가 인자(위치 및 키워드 인자)

 

예시

기본적인 열 변환

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': [10, 20, 30, 40]
})

# 각 열의 값을 제곱
df_transformed = df.transform(lambda x: x**2)
print(df_transformed)
    A    B
0   1  100
1   4  400
2   9  900
3  16 1600

 

 

여러 함수를 열에 적용

# A 열에는 제곱, B 열에는 두 배로 변환
df_transformed = df.transform({'A': lambda x: x**2, 'B': lambda x: x * 2})
print(df_transformed)
    A   B
0   1  20
1   4  40
2   9  60
3  16  80

 

 

문자열 함수

# NumPy의 sqrt 함수 적용
df_transformed = df.transform('sqrt')
print(df_transformed)
          A         B
0  1.000000  3.162278
1  1.414214  4.472136
2  1.732051  5.477226
3  2.000000  6.324555

 

 

그룹화와 함께 사용

groupby와 함께 사용하여 그룹별 통계량을 각 행에 할당

df = pd.DataFrame({
    'group': ['A', 'A', 'B', 'B'],
    'value': [10, 20, 30, 40]
})

# 그룹별 평균 값을 각 행에 추가
df['group_mean'] = df.groupby('group')['value'].transform('mean')
print(df)
  group  value  group_mean
0     A     10        15.0
1     A     20        15.0
2     B     30        35.0
3     B     40        35.0

 

 

복잡한 변환 작업

사용자 정의 함수로 복잡한 계산 적용

df_transformed = df.transform(lambda x: (x - x.mean()) / x.std())
print(df_transformed)
          A         B
0 -1.341641 -1.341641
1 -0.447214 -0.447214
2  0.447214  0.447214
3  1.341641  1.341641

 

 

추가사항

- 출력 크기는 원본 데이터프레임과 동일해야 하고, 출력 크기가 다르면 ValueError가 발생

- apply와 차이점: apply는 열이나 행에 적용된 결과를 다른 크기의 데이터로 반환할 수 있음

 

transform vs apply

출력 크기 원본과 동일한 크기 출력 크기가 달라도 가능
그룹화와 사용 그룹별로 동일한 크기 데이터를 변환할 때 사용 그룹별 통계량 계산 및 요약 작업에 적합
적용 가능한 작업 각 열/행에 독립적으로 작업 그룹 전체를 요약하거나 복잡한 작업 수행 가능
주요 사용 사례 그룹별 통계량 변환, 스케일링, 표준화 복잡한 계산 또는 요약 통계 계산

 

반응형