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新手实现2048小游戏
Mar 31 Python
Python访问纯真IP数据库脚本分享
Jun 29 Python
python利用urllib和urllib2访问http的GET/POST详解
Sep 27 Python
使用Python操作excel文件的实例代码
Oct 15 Python
python五子棋游戏的设计与实现
Jun 18 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
Selenium webdriver添加cookie实现过程详解
Aug 12 Python
Python读取Excel一列并计算所有对象出现次数的方法
Sep 04 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 Python
python实战之90行代码写个猜数字游戏
Apr 22 Python
golang特有程序结构入门教程
Jun 02 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
php&java(二)
2006/10/09 PHP
php 中文处理函数集合
2008/08/27 PHP
flash用php连接数据库的代码
2011/04/21 PHP
php url路由入门实例
2014/04/23 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
javascript multibox 全选
2009/03/22 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
Python获取当前时间的方法
2014/01/14 Python
python中os操作文件及文件路径实例汇总
2015/01/15 Python
Python标准异常和异常处理详解
2015/02/02 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
Python 模拟购物车的实例讲解
2017/09/11 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
Flask框架路由和视图用法实例分析
2019/11/07 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
专科毕业生学习生活的自我评价
2013/10/26 职场文书
五月的鲜花活动方案
2014/08/21 职场文书
2014年公务员工作总结
2014/11/18 职场文书
杜甫草堂导游词
2015/02/03 职场文书
2015年组织部工作总结
2015/04/03 职场文书
联村联户简报
2015/07/21 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript