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引用(import)文件夹下的py文件的方法
Aug 26 Python
numpy中索引和切片详解
Dec 15 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
对pandas中apply函数的用法详解
Apr 10 Python
Python代码缩进和测试模块示例详解
May 07 Python
详解python 3.6 安装json 模块(simplejson)
Apr 02 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
Python数据可视化:泊松分布详解
Dec 07 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
python中count函数简单的实例讲解
Feb 06 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
python缺失值的解决方法总结
Jun 09 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
Protoss魔法科技
2020/03/14 星际争霸
解决php表单重复提交实现方法
2015/09/29 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
微信js-sdk上传与下载图片接口用法示例
2016/10/12 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
python中dir函数用法分析
2015/04/17 Python
python入门教程之识别验证码
2017/03/04 Python
Python基于numpy灵活定义神经网络结构的方法
2017/08/19 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
2020/12/13 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
师德学习感言
2014/01/31 职场文书
总裁助理岗位职责
2014/02/17 职场文书
保护环境倡议书100字
2014/05/19 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
综合测评自我评价
2015/03/06 职场文书
同学聚会通知书
2015/04/20 职场文书
小学入学感言
2015/08/01 职场文书
公司员工培训管理制度
2015/08/04 职场文书
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python
Oracle中日期的使用方法实例
2022/07/07 Oracle