当前位置:实例文章 » Python实例» [文章]Python数据分组计算利器:Transform函数

Python数据分组计算利器:Transform函数

发布人:shili8 发布时间:2023-03-15 18:20 阅读次数:9

使用Python进行数据清洗时,需要对数据进行分组计算,一般使用’goupby+计算函数’,但是返回的结果并不是原来表格的格式。或者是使用遍历的方式,将每组计算的结果返回到原表格中。

Transform是Pandas中的一个函数,它用于在dataframe中对数据进行转换或操作,并且按照原来的Dataframe格式输出结果。transform函数通常用于按照分组的方式对数据进行操作,例如对每个组进行标准化、填充缺失值等。

PS: 虽然标准化、缺失值填充现在都有sklearn都有对应的函数,但是直接调用Transform还是目前了解到的最方便的分组处理方法。

语法参数介绍

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

其中,

  • 参数func是一个函数,它定义了对数据进行的操作,可以是一个内置函数或用户自定义函数;
  • 参数axis指定了操作的方向,可以是0表示对列进行操作,1表示对行进行操作,默认值为0。
  • 另外,还可以使用可选参数*args和****kwargs**传递给func函数。

常用的内置函数介绍:

函数名称解释
sum()对数据进行求和操作。
mean()对数据进行求平均值操作。
median()对数据进行求中位数操作。
min()对数据进行求最小值操作。
max()对数据进行求最大值操作。
count()对数据进行计数操作。
cumsum()对数据进行累计求和操作。
cumprod()对数据进行累计乘积操作。
cummax()对数据进行累计最大值操作。
cummin()对数据进行累计最小值操作。
rank()对数据进行排名操作。
diff()对数据进行差分操作。
pct_change()对数据进行百分比变化操作。

使用代码案例

import pandas as pd
import numpy as np

# 创建一个数据框
df = pd.DataFrame({'group': ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'],
                   'data': [1, 2, 3, 4, 5, 6, 7, np.nan, 9]})

# 对数据框按照分组进行标准化
df['data_standardized'] = df.groupby('group')['data'].transform(lambda x: (x - np.mean(x)) / np.std(x))

# 对数据框按照分组,取该组最后一个值
df['data_last'] = df.groupby('group')['data'].transform('last')

# 对数据框按照分组,对空值进行平均值填充
df['data_filled'] = df.groupby('group')['data'].transform(lambda x: x.fillna(x.mean()))

# 打印输出结果
print(df)

在这里插入图片描述

Labmda Vs 内置函数 该使用哪个更好?

#labmda 
df['lam_sum_by_group'] = df.groupby('group')['data'].transform(lambda x: x.sum())
#直接调用内置函数
df['sum_by_group'] = df.groupby('group')['data'].transform('sum')
#结果查看
df

在这里插入图片描述
最后结果是一致的。 两种方法的作用是相同的,都是对"df"按照"group"进行分组,然后在每个组内计算"data"列的和。

两者的区别在于函数的传递方式。

使用lambda函数可以更加灵活的操作,包括使用任意的Python表达式和语句和自定义函数。而调用内置函数只能使用原本系统定义好的函数。但是,在性能上,使用内置函数要比使用lambda函数更加高效。具体使用哪种方式需要根据实际情况进行选择。

参考资料;
这个总结的也很全面:【Python】Pandas中的宝藏函数-transform()

相关标签:

免责声明

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱290110527@qq.com删除。

其他信息

其他资源

Top