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实现的文件同步服务器实例
Jun 02 Python
使用Python进行二进制文件读写的简单方法(推荐)
Sep 12 Python
Python中如何获取类属性的列表
Dec 26 Python
Python中的__slots__示例详解
Jul 06 Python
python实现远程通过网络邮件控制计算机重启或关机
Feb 22 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
Jan 05 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
python 实现读取csv数据,分类求和 再写进 csv
May 18 Python
怎么快速自学python
Jun 22 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
Jul 09 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
Oct 10 Python
Python初学者必备的文件读写指南
Jun 23 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
在smarty中调用php内置函数的方法
2013/02/07 PHP
关于初学PHP时的知识积累总结
2013/06/07 PHP
PHP制作图形验证码代码分享
2014/10/23 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
JQuery之拖拽插件实现代码
2011/04/14 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
JavaScript中的比较操作符>、=、
2014/12/31 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
JavaScript使用addEventListener添加事件监听用法实例
2015/06/01 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
python处理二进制数据的方法
2015/06/03 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
python binascii 进制转换实例
2019/06/12 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
俄罗斯最大的消费电子连锁零售商:Mvideo
2017/06/25 全球购物
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
华为C++笔试题
2014/08/05 面试题
仓库管理专业个人的自我评价
2013/12/30 职场文书
本科生职业生涯规划书范文
2014/01/21 职场文书
医学生求职自荐书
2014/06/12 职场文书
增值税发票丢失证明
2015/06/19 职场文书
感恩教师节主题班会
2015/08/12 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
Python制作动态字符画的源码
2021/08/04 Python
Mac电脑OS系统下安装Nginx的详细教程
2022/04/14 Servers
mysql数据库如何转移到oracle
2022/12/24 MySQL