오늘은 transform
함수에 대해서 이해해보고 활용해보겠다.
transform
함수는 DataFrame의 groupby
에 내장된 member함수이다.
transform
함수가 하는 일은 groupby
의 통계함수를 적용하는 것과 굉장히 비슷하다.
전 시간에 우리가 groupby를 통해서 통계함수를 적용하게 되면 원본 DataFrame과는 다른 shape의 DataFrame이 만들어지는 것을 확인했다.
그런데 transform
함수를 이용하게되면 원본 데이터의 인덱스를 유지한 채로 새로운 값을 추가하게 된다.
이러한 transform의 특성은 원본 데이터에 없던 새로운 속성을 추가하기에 굉장히 용이하게 한다.
몬말인지 잘 모르겠으니, 실습을 통해 공부해보자.
import numpy as np
import pandas as pd
df = pd.read_csv('./train_csv')
df.head()
원본 DataFrame의 shape을 기억해보자.
우선 groupby
함수를 사용해 통계함수를 뽑아보겠다.
# <in>
df.groupby('Pclass').mean()
Pclass를 기준으로 groupby함수를 사용해 평균값을 뽑아내면 원본 DataFrame과 달리 row 개수가 3개로 줄어든 것을 확인할 수 있다. Pclass의 종류가 3개이기(1, 2, 3) 때문일 것이다.
즉 groupby함수를 사용하여 통계정보를 뽑아내면, 원본 데이터와는 다른 모양의 DataFrame을 반환한다.
그런데 이런 똑같은 작업을 transform을 이용해서 하게되면 어떻게 될까?
바로 확인해보자.
원본 데이터의 index를 유지하면서 각 그룹별 통계치가 입력된 DataFrame을 반환한다.
transform을 이용해 반환한 데이터는 원본 데이터의 인덱스 숫자가 같기 때문에, 원본데이터에 이를 추가하거나 수정하는 데 있어 기존의 groupby를 사용했을 때와 비교해 우위를 갖는다.
나는 여기까지 공부했을 때 까진 원본 데이터의 인덱스 숫자가 같았을 때, 어떤 식으로 우위를 가져올 수 있다는 건지 감이 오지 않았다.
때문에 예시를 통해 transform의 강점을 파악해봤다.
# <in>
df.groupby('Pclass').transform(np.mean)
groupby의 transform을 이용해 Pclass을 기준으로 하는 각 속성별 평균값을 구했고, 나는 이 통계치 중 Age의 평균값 만을 원본 데이터에 추가하고 싶다.
그렇다면
# <in>
df.groupby('Pclass').transform(np.mean)['Age']
통계 DataFrame에서 Age값만 추출하면 Age 평균값으로 구성된 Series가 반환될 것이고, 이것을 그대로 원본 DataFrame에 추가해주면 목적을 달성할 수 있을 것이다.
만약 transform을 사용하지 않고 groupby함수를 사용했다면, 반환된 DataFrame의 인덱스 숫자가 다른 탓에, 곧바로 DataFrame에 대입하는 방법은 사용할 수 없었을 것이다.
# <in>
df['Age2'] = df.groupby('Pclass').transform(np.mean)['Age']
다른 함수를 호출할 필요없이, 아주 손쉽게 Age2속성을 추가할 수 있었다.
이번엔 groupby를 multiple로 해보자.
# <in>
df.groupby(['Pclass','Sex']).mean()
역시 row개수가 원본 데이터와 같지 않기 때문에, 원본 데이터에 이 데이터를 추가하려면 다른 함수를 추가로 사용해야한다. groupby의 transform함수를 사용해보자.
# <in>
df.groupby(['Pclass','Sex']).transform(np.mean)
원본 데이터의 인덱스 개수와 같은 DataFrame이 반환되었다. 클래스+성별 기준의 속성값 평균이 입력된 DataFrame이다.
이 데이터는 전과 같은 과정을 통해 원본 DataFrame에 추가가 가능할 것이다.
Age3로 값을 추가해보자.
# <in>
df['Age3']= df.groupby(['Pclass','Sex']).transform(np.mean)['Age']
transform을 이용하여 새로운 결과(통계값)을 기존에 데이터에 추가하는 방법을 공부해봤다.
다음시간엔 pivot과 pivot_table을 이용하여 어떻게 DataFrame을 변형할 수 있는 지 공부해보자.
'python > pandas' 카테고리의 다른 글
20. pandas DataFrame - stack, unstack 함수 (0) | 2023.02.26 |
---|---|
19. pandas DataFrame - pivot, pivot_table 함수 (0) | 2023.02.26 |
17. pandas DataFrame - groupby (0) | 2023.02.22 |
16. pandas DataFrame - 숫자형, 범주형 데이터의 이해 (0) | 2023.02.21 |
15. pandas DataFrame NaN 데이터 전처리 (0) | 2023.02.21 |