pandas中apply和transform方法的性能比较及区别介绍


Posted in Python onOctober 30, 2018

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() 方法+自定义函数

pandas中apply和transform方法的性能比较及区别介绍

2.2 transform() 方法+python内置方法

pandas中apply和transform方法的性能比较及区别介绍

2.3 apply() 方法+自定义函数

pandas中apply和transform方法的性能比较及区别介绍

2.4 agg() 方法+自定义函数

pandas中apply和transform方法的性能比较及区别介绍

2.5 agg() 方法+python内置方法

pandas中apply和transform方法的性能比较及区别介绍

2.6 结论

agg()+python内置方法的计算速度最快,其次是transform()+python内置方法。而 transform() 方法+自定义函数 的组合方法最慢,需要避免使用!

而下面两图中红框内容可观察发现:python自带的stats统计模块在pandas结构中的计算也非常慢,也需要避免使用!

pandas中apply和transform方法的性能比较及区别介绍

pandas中apply和transform方法的性能比较及区别介绍

3. 实例分析

需求:计算每个用户每天

某种行为消费次数、消费总额、消费均额、消费最大额、消费最小额

在几个终端支付、最常支付终端号、最常支付终端号的支付次数、最少支付终端号、最少支付终端号的支付次数

某种行为最常消费发生时间段、最常消费发生时间段的消费次数、最少消费发生时间段、最少消费发生时间段的消费次数

某种行为最早消费时间、最晚消费时间

原始数据信息:306626 x 9

pandas中apply和transform方法的性能比较及区别介绍

具体选择哪种方法处理,根据实际情况确定,在面对复杂计算时,transform() 与apply()结合使用往往会有意想不到的效果!

需要注意的是,在与apply()一起使用时,transform需要进行去重操作,一般是通过指定一或多个列完成。

此外,匿名函数永远不是一个很好的办法,在进行简单计算时,无论是使用transfrom、agg还是apply,都要尽可能使用自带方法!!!

4. 小技巧

在使用apply()方法处理大数据级时,可以考虑使用joblib中的多线程/多进程模块构造相应函数执行计算,以下分别是采用多进程和单进程的耗时时长。

可以看到,在260W的数据集上,多进程比单进程的计算速度可以提升约17%~61%  。

pandas中apply和transform方法的性能比较及区别介绍

总结

以上所述是小编给大家介绍的pandas中apply和transform方法的性能比较,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python操作摄像头截图实现远程监控的例子
Mar 25 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
python之PyMongo使用总结
May 26 Python
Python原始字符串与Unicode字符串操作符用法实例分析
Jul 22 Python
Python 一句话生成字母表的方法
Jan 02 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
Oct 12 Python
python 给图像添加透明度(alpha通道)
Apr 09 Python
Django 解决model 反向引用中的related_name问题
May 19 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
Jul 31 Python
通过实例解析python subprocess模块原理及用法
Oct 10 Python
python爬取抖音视频的实例分析
Jan 19 Python
pandas.dataframe按行索引表达式选取方法
Oct 30 #Python
python 判断参数为Nonetype类型或空的实例
Oct 30 #Python
python 找出list中最大或者最小几个数的索引方法
Oct 30 #Python
python2与python3中关于对NaN类型数据的判断和转换方法
Oct 30 #Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 #Python
Python Numpy:找到list中的np.nan值方法
Oct 30 #Python
pandas 条件搜索返回列表的方法
Oct 30 #Python
You might like
SONY ICF-F10中波修复记
2021/03/02 无线电
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
2013/04/08 PHP
如何使用Strace调试工具
2013/06/03 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
Div Select挡住的解决办法
2008/08/07 Javascript
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
jquery.ui.draggable中文文档(原文翻译)
2013/11/15 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
AngularJS入门之动画
2016/07/27 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
2016/09/17 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
vue实现登陆登出的实现示例
2017/09/15 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
Python ftp上传文件
2016/02/13 Python
基于使用paramiko执行远程linux主机命令(详解)
2017/10/16 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
python 正确保留多位小数的实例
2018/07/16 Python
TensorFlow实现模型评估
2018/09/07 Python
Pycharm修改python路径过程图解
2020/05/22 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
C++是不是类型安全的
2014/02/18 面试题
《第一次抱母亲》教学反思
2014/04/16 职场文书
爱国演讲稿500字
2014/05/04 职场文书
模特大赛策划方案
2014/05/28 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
关于颐和园的导游词
2015/01/30 职场文书
工作岗位职责范本
2015/02/15 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
学前教育见习总结
2015/06/23 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
小学语文国培研修日志
2015/11/13 职场文书
优秀员工演讲稿
2019/06/21 职场文书
python如何进行基准测试
2021/04/26 Python