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标准库之多进程(multiprocessing包)介绍
Nov 25 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
Python制作爬虫采集小说
Oct 25 Python
Python元字符的用法实例解析
Jan 17 Python
python socket网络编程之粘包问题详解
Apr 28 Python
python实现对求解最长回文子串的动态规划算法
Jun 02 Python
基于pytorch的保存和加载模型参数的方法
Aug 17 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
Jan 05 Python
在keras中model.fit_generator()和model.fit()的区别说明
Jun 17 Python
Python如何在单元测试中给对象打补丁
Aug 03 Python
Django数据库迁移常见使用方法
Nov 12 Python
python 远程执行命令的详细代码
Feb 15 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
PHP4实际应用经验篇(8)
2006/10/09 PHP
PHP5 字符串处理函数大全
2010/03/23 PHP
从php核心代码分析require和include的区别
2011/01/02 PHP
php短址转换实现方法
2015/02/25 PHP
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
2013/05/26 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
2017/05/03 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
React组件中的this的具体使用
2018/02/28 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
简单了解django orm中介模型
2019/07/30 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
工业设计专业推荐信
2013/10/29 职场文书
社团招新策划书
2014/02/04 职场文书
会计与出纳自荐书范文
2014/03/16 职场文书
放假通知
2015/04/14 职场文书
校运会加油稿大全
2015/07/22 职场文书
2016年感恩教师节活动总结
2016/04/01 职场文书
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL