pandas中apply和transform方法的性能比较及区别介绍

作者:Bo_hemian 时间:2023-07-18 22:23:40 

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方法的性能比较网站的支持!

来源:http://www.cnblogs.com/wkang/p/9794678.html

标签:pandas,apply,transform
0
投稿

猜你喜欢

  • Python排序算法之堆排序算法

    2023-01-17 02:00:55
  • Django之使用内置函数和celery发邮件的方法示例

    2022-03-04 17:15:26
  • MySQL中表分区技术详细解析

    2024-01-21 01:01:11
  • ASP.NET将Session保存到数据库中的方法

    2024-01-19 16:31:46
  • 前端token中4个存储位置的优缺点说明

    2023-07-02 16:39:50
  • 浅析Python 实现一个自动化翻译和替换的工具

    2021-12-03 20:48:25
  • GitHub 热门:Python 算法大全,Star 超过 2 万

    2021-05-27 21:28:50
  • MenuEverywhere 程序图标设计

    2011-08-14 06:57:23
  • Web标准下该如何“插入”图像

    2008-03-17 13:01:00
  • SQL Data Services将成为云中完整的数据库

    2009-03-25 12:28:00
  • Python Django 数据库的相关操作详解

    2024-01-26 21:02:46
  • TensorFlow搭建神经网络最佳实践

    2021-03-11 18:59:26
  • VUE写一个简单的表格实例

    2023-07-02 16:56:30
  • IE6,7下实现white-space:pre-wrap;

    2009-12-31 18:30:00
  • 在Pycharm中修改文件默认打开方式的方法

    2023-03-12 06:34:23
  • Python中unittest的数据驱动详解

    2021-06-04 18:26:05
  • Python如何读写二进制数组数据

    2022-01-12 19:35:57
  • python中实现指定时间调用函数示例代码

    2021-04-20 07:14:25
  • Oracle如何设置表空间数据文件大小

    2024-01-13 01:00:03
  • Element树形控件整合带图标的下拉菜单(tree+dropdown+input)

    2023-07-02 16:45:35
  • asp之家 网络编程 m.aspxhome.com