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 文件重命名工具代码
Jul 26 Python
高质量Python代码编写的5个优化技巧
Nov 16 Python
Python实现的桶排序算法示例
Nov 29 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
Feb 26 Python
利用python脚本如何简化jar操作命令
Feb 24 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
May 29 Python
kali中python版本的切换方法
Jul 11 Python
Django 缓存配置Redis使用详解
Jul 23 Python
Scrapy爬虫文件批量运行的实现
Sep 30 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
Dec 14 Python
python 进阶学习之python装饰器小结
Sep 04 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 Ajax实现页面无刷新发表评论
2007/01/02 PHP
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
解析php常用image图像函数集
2013/06/24 PHP
汇总PHPmailer群发Gmail的常见问题
2016/02/24 PHP
php调用自己java程序的方法详解
2016/05/13 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
Javascript中 关于prototype属性实现继承的原理图
2013/04/16 Javascript
javascript页面加载完执行事件代码
2014/02/11 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
2019/06/27 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
2019/09/11 Python
python:动态路由的Flask程序代码
2019/11/22 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
最新远光软件笔试题面试题内容
2013/11/08 面试题
团日活动策划书
2014/02/01 职场文书
违反校纪校规检讨书
2014/02/15 职场文书
护理中职生求职信范文
2014/02/24 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server