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解析xml成对应的html示例分享
Apr 02 Python
使用Python中的cookielib模拟登录网站
Apr 09 Python
详解python中的json的基本使用方法
Dec 21 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
pandas中Timestamp类用法详解
Dec 11 Python
Python语言描述连续子数组的最大和
Jan 04 Python
python使用Flask操作mysql实现登录功能
May 14 Python
python实现简单日期工具类
Apr 24 Python
python3.6编写的单元测试示例
Aug 17 Python
解决Numpy中sum函数求和结果维度的问题
Dec 06 Python
PyTorch中clone()、detach()及相关扩展详解
Dec 09 Python
python基础学习之生成器与文件系统知识总结
May 25 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
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
jquery $("#variable") 循环改变variable的值示例
2014/02/23 Javascript
JS 使用for循环遍历子节点查找元素
2014/09/06 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
动手写一个angular版本的Message组件的方法
2017/12/16 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
vue中使用input[type="file"]实现文件上传功能
2018/09/10 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
python保存字符串到文件的方法
2015/07/01 Python
opencv python 基于KNN的手写体识别的实例
2018/08/03 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
python3 mmh3安装及使用方法
2019/10/09 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
详解HTML5.2版本带来的修改
2020/05/06 HTML / CSS
.NET remoting中对象激活的两种方式
2015/06/08 面试题
如何写一个自定义标签
2012/12/28 面试题
小学学习雷锋活动总结
2014/07/03 职场文书
银行进社区活动总结
2014/07/07 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python