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 Django连接MySQL数据库做增删改查
Nov 07 Python
用Python编写一个基于终端的实现翻译的脚本
Apr 24 Python
Django中的ajax请求
Oct 19 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
Nov 11 Python
简单了解python数组的基本操作
Nov 26 Python
PyQt5 界面显示无响应的实现
Mar 26 Python
python与idea的集成的实现
Nov 20 Python
python 写一个文件分发小程序
Dec 05 Python
pyqt5实现井字棋的示例代码
Dec 07 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
php 方便水印和缩略图的图形类
2009/05/21 PHP
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
Js的MessageBox
2006/12/03 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
2015/09/28 Javascript
jQuery防止重复绑定事件的解决方法
2016/05/14 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
js模拟微博发布消息
2017/02/23 Javascript
解决Layui中templet中a的onclick参数传递的问题
2019/09/20 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
[06:24]DOTA2亚洲邀请赛小组赛第三日 TOP10精彩集锦
2015/02/01 DOTA
Python标准库内置函数complex介绍
2014/11/25 Python
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
几个Linux面试题笔试题
2012/12/01 面试题
与UNIX有关的几个名词
2015/09/17 面试题
保安队长职务说明书
2014/02/23 职场文书
无传销社区工作方案
2014/05/13 职场文书
改革共识倡议书
2014/08/29 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
死亡证明书样本说明
2014/10/18 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
求职信如何撰写?
2019/05/22 职场文书
mysql的数据压缩性能对比详情
2021/11/07 MySQL