Python/Pandas & numpy
판다스 : .transform()
Mr.DonyStark
2024. 2. 8. 17:15
□ 함수는 그룹별로 계산된 결과를 원본 데이터프레임에 다시 병합하는 역할수행
□ 주로 그룹별로 계산한 평균, 합 등의 값을 각 행에 적용하고자 할 때 사용
□ 예제
○ 라이브러리 호출 및 데이터 불러오기
#라이브러리 호출
import pandas as pd
import numpy as np
#데이터 불러오기
df = pd.read_csv('C:/python/DataScience/Data/data/python_data/gapminder.tsv', delimiter='\t')
○ 함수정의 및 구룹화된 데이터 프레임에 transfom을 적용하여 값 조회
#함수정의 : 표준편차
def my_zscore(x):
return ((x - x.mean()) / x.std())
#시리즈반환 : year필드로 그룹화 후 표준편차 함수 lifeExp열적용
df1 = df.groupby('year')['lifeExp'].transform(my_zscore)
□ 예제심화
#라이브러리 불러오기
import numpy as np
import seaborn as sns
#데이터 불러오기
np.random.seed(42)
tips_10 = sns.load_dataset('tips').sample(10)
# total_bill 필드의 인덱스 4까지 값 NaN으로 변경
# np.random.permutation()함수를 뒤섞은 후에 n개만큼 indexing
tips_10.loc[
np.random.permutation(tips_10.index)[:4],'total_bill'
] = np.NaN
○ 함수와 transform기능을 활용해 새로운 필드에 값 채우기
#함수정의
def fillna_num(x):
avg = x.mean()
return x.fillna(avg)
#sex필드를 기준으로 total_bill 열 기준으로 정의한 함수를 적용하여 NaN값 채움
transform_field = tips_10.groupby('sex')['total_bill'].transform(fillna_num)
#transform과 함수를 바탕으로 생성된 시리즈를 바탕으로 새로운 필드 생성
tips_10['new_total_bill'] = transform_field