分享Pandas库中的一些宝藏函数transform()

  • Post category:Python

当我们处理一些需要对分组数据进行计算的任务时,例如计算数据的均值、中位数、标准差等,很可能就会需要用到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()函数在进行数据分组计算时非常有用。