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的Django框架中Manager方法的使用
Jul 21 Python
python中闭包Closure函数作为返回值的方法示例
Dec 17 Python
python print 按逗号或空格分隔的方法
May 02 Python
深入浅析python 中的匿名函数
May 21 Python
python实现指定文件夹下的指定文件移动到指定位置
Sep 17 Python
Python在图片中插入大量文字并且自动换行
Jan 02 Python
flask框架路由常用定义方式总结
Jul 23 Python
Pycharm最新激活码2019(推荐)
Dec 31 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
Feb 15 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
基于 Python 实践感知器分类算法
Jan 07 Python
手残删除python之后的补救方法
Jun 26 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批量检测并去除文件BOM头代码实例
2014/05/08 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
juqery 学习之四 筛选过滤
2010/11/30 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
pandas series序列转化为星期几的实例
2018/04/11 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
在python image 中实现安装中文字体
2020/05/16 Python
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
红旗团支部事迹材料
2014/01/27 职场文书
企业职业病防治方案
2014/05/29 职场文书
党员四风问题对照检查材料
2014/09/27 职场文书
婚宴邀请函
2015/01/30 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
2016年学校安全教育月活动总结
2016/04/06 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
小程序wx.getUserProfile接口的具体使用
2021/06/02 Javascript