pandas中apply和transform方法的性能比较及区别介绍
作者:Bo_hemian 发布时间:2023-07-18 22:23:40
1. apply与transform
首先讲一下apply() 与transform()的相同点与不同点
相同点:
都能针对dataframe完成特征的计算,并且常常与groupby()方法一起使用。
不同点:
apply()里面可以跟自定义的函数,包括简单的求和函数以及复杂的特征间的差值函数等(注:apply不能直接使用agg()方法 / transform()中的python内置函数,例如sum、max、min、'count‘等方法)
transform() 里面不能跟自定义的特征交互函数,因为transform是真针对每一元素(即每一列特征操作)进行计算,也就是说在使用 transform() 方法时,需要记得三点:
1、它只能对每一列进行计算,所以在groupby()之后,.transform()之前是要指定要操作的列,这点也与apply有很大的不同。
2、由于是只能对每一列计算,所以方法的通用性相比apply()就局限了很多,例如只能求列的最大/最小/均值/方差/分箱等操作
3、transform还有什么用呢?最简单的情况是试图将函数的结果分配回原始的dataframe。也就是说返回的shape是(len(df),1)。注:如果与groupby()方法联合使用,需要对值进行去重
2. 各方法耗时
分别计算在同样简单需求下各组合方法的计算时长
2.1 transform() 方法+自定义函数
2.2 transform() 方法+python内置方法
2.3 apply() 方法+自定义函数
2.4 agg() 方法+自定义函数
2.5 agg() 方法+python内置方法
2.6 结论
agg()+python内置方法的计算速度最快,其次是transform()+python内置方法。而 transform() 方法+自定义函数 的组合方法最慢,需要避免使用!
而下面两图中红框内容可观察发现:python自带的stats统计模块在pandas结构中的计算也非常慢,也需要避免使用!
3. 实例分析
需求:计算每个用户每天
某种行为消费次数、消费总额、消费均额、消费最大额、消费最小额
在几个终端支付、最常支付终端号、最常支付终端号的支付次数、最少支付终端号、最少支付终端号的支付次数
某种行为最常消费发生时间段、最常消费发生时间段的消费次数、最少消费发生时间段、最少消费发生时间段的消费次数
某种行为最早消费时间、最晚消费时间
原始数据信息:306626 x 9
具体选择哪种方法处理,根据实际情况确定,在面对复杂计算时,transform() 与apply()结合使用往往会有意想不到的效果!
需要注意的是,在与apply()一起使用时,transform需要进行去重操作,一般是通过指定一或多个列完成。
此外,匿名函数永远不是一个很好的办法,在进行简单计算时,无论是使用transfrom、agg还是apply,都要尽可能使用自带方法!!!
4. 小技巧
在使用apply()方法处理大数据级时,可以考虑使用joblib中的多线程/多进程模块构造相应函数执行计算,以下分别是采用多进程和单进程的耗时时长。
可以看到,在260W的数据集上,多进程比单进程的计算速度可以提升约17%~61% 。
总结
以上所述是小编给大家介绍的pandas中apply和transform方法的性能比较网站的支持!
来源:http://www.cnblogs.com/wkang/p/9794678.html
猜你喜欢
- 每次在"万达影城"网上购票总会用到左上角选择城市的功能。如下:今天就在ASP.NET MVC中实现一下。我想最好的方式应
- 一、前言相关知识来自《python算法设计与分析》。初级排序算法是指几种较为基础且容易理解的排序算法。初级排序算法包括插入排序、选择排序和冒
- 二分类问题可能是应用最广泛的机器学习问题。今天我们将学习根据电影评论的文字内容将其划分为正面或负面。一、数据集来源我们使用的是IMDB数据集
- 前言本文主要给大家介绍了解决apahce部署python程序出现503错误的相关内容,下面话不多说了,下一起看看详细的介绍吧。发现问题今天更
- 本文实例讲述了python实现矩阵乘法的方法。分享给大家供大家参考。具体实现方法如下:def matrixMul(A, B):
- asp生成wbmp代码如下: <%@ Language=VBScript %><%Funct
- 目录1.任务要求2.简单设计3.模块实现4.总结由于一些小原因,被迫开始了tkinter一次实战演练。在此做一些记录,总结以及给自己留一些轮
- 一、Pandoc转换1.1 问题由于我们markdown编辑器比较特殊,一般情况下,我们不太好看,如果转换成pdf的话,我们就不需要可以的去
- numpy中的乘法A = np.array([[1, 2, 3], [2, 3, 4]])B = np.array([[1, 0, 1],
- 一、python压缩模块简介python直接通过内置压缩模块可以直接进行压缩文件的创建;内置模块 zipfile/rarfile 完成压缩文
- 本文实例为大家分享了python+openCV利用摄像头实现人员活动检测的具体代码,供大家参考,具体内容如下1.前言最近在做个机器人比赛,其
- 变量作用域变量由作用范围限制分类:按照作用域分类全局(global):在函数外部定义局部(local):在函数内部定义变量的作用范围全局变量
- 想必很多初次接触python都会见到这样一个语句,if __name__ == "__main__":那么这个语句到底是
- python 获取星期字符串程序如下#WeekNamePrintV1.pyweekStr="星期一星期二星期三星期四星期五星期六星
- 自定义路径转换器有时候上面的内置的url转换器并不能满足我们的需求,因此django给我们提供了一个接口可以让我们自己定义自己的url转换器
- 问题:无法上传较大的文件“Request 对象 错误 'ASP 0104 : 80004005'”或者上传成功后,找不到文件
- 字典类型是Python中最常用的数据类型之一,它是一个键值对的集合,字典通过键来索引,关联到相对的值,理论上它的查询复杂度是 O(1) :&
- 第一步:python解释器,到网上下载安装下就行。网址:https://www.python.org/downloads/windows/值
- 一,分析代码运行时间第1式,测算代码运行时间平凡方法快捷方法(jupyter环境)第2式,测算代码多次运行平均时间平凡方法快捷方法(jupy
- 1、安装pip install mediapipe2、代码实现# -*- coding: utf-8 -*-""&quo