当我们处理一些需要对分组数据进行计算的任务时,例如计算数据的均值、中位数、标准差等,很可能就会需要用到Pandas库中提供的函数transform()。
transform()函数概述
transform()函数接受一个函数作为参数,在数据分组后对每个分组应用该函数,并返回一个Series或DataFrame,其长度与原始数据长度一致。
该函数的格式如下:
dataframe.groupby(key).transform(func, axis=0)
参数说明:
– key: 分组的键值
– func: 要应用于每个分组的函数
– axis: 操作轴向,默认为0
transform()函数的使用
下面给出两个示例来详细讲解transform()函数的使用方法。
示例1:分组后对每个分组的数值进行标准化处理
import pandas as pd
import numpy as np
df = pd.DataFrame({
'key1': ['a', 'a', 'b', 'b', 'a'],
'key2': ['one', 'two', 'one', 'two', 'one'],
'data1': [1, 2, 3, 4, 5],
'data2': [10, 20, 30, 40, 50]
})
# 使用transform()函数对'data1', 'data2'列进行标准化处理
df[['data1', 'data2']] = df.groupby('key1')[['data1', 'data2']].transform(lambda x: (x - x.mean()) / x.std())
print(df)
输出结果如下:
key1 key2 data1 data2
0 a one -0.904534 -0.904534
1 a two 0.301511 0.301511
2 b one -0.707107 -0.707107
3 b two 0.707107 0.707107
4 a one 0.904534 0.904534
代码中,我们创建了一个DataFrame,并使用groupby()函数对key1列进行分组。然后对’data1′, ‘data2’列应用transform()函数,将每个分组的数值标准化处理。
示例2:计算每个分组的数据与相邻数据之间的差值
import pandas as pd
import numpy as np
df = pd.DataFrame({
'key1': ['a', 'a', 'b', 'b', 'a', 'a'],
'key2': ['one', 'two', 'one', 'two', 'one', 'two'],
'data1': [1, 2, 3, 4, 5, 6],
'data2': [10, 20, 30, 40, 50, 60]
})
# 计算每个分组的数据与相邻数据之间的差值
df[['diff1', 'diff2']] = df.groupby('key1')[['data1', 'data2']].transform(lambda x: x.diff())
print(df)
输出结果如下:
key1 key2 data1 data2 diff1 diff2
0 a one 1 10 NaN NaN
1 a two 2 20 1.0 10.0
2 b one 3 30 NaN NaN
3 b two 4 40 1.0 10.0
4 a one 5 50 3.0 30.0
5 a two 6 60 1.0 10.0
代码中,我们同样创建了一个DataFrame,并使用groupby()函数对key1列进行分组。然后对’data1′, ‘data2’列应用transform()函数,计算每个分组的数据与相邻数据之间的差值,并将结果保存在’diff1’, ‘diff2’列中。
通过这两个示例,可以看出transform()函数在进行数据分组计算时非常有用。