当前位置: 首页 > 编程笔记 >

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

葛越
2023-03-14
本文向大家介绍pandas中apply和transform方法的性能比较及区别介绍,包括了pandas中apply和transform方法的性能比较及区别介绍的使用技巧和注意事项,需要的朋友参考一下

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() 方法+自定义函数


2.2 transform() 方法+python内置html" target="_blank">方法


2.3 apply() 方法+自定义函数


2.4 agg() 方法+自定义函数


2.5 agg() 方法+python内置方法


2.6 结论

agg()+python内置方法的计算速度最快,其次是transform()+python内置方法。而 transform() 方法+自定义函数 的组合方法最慢,需要避免使用!

而下面两图中红框内容可观察发现:python自带的stats统计模块在pandas结构中的计算也非常慢,也需要避免使用!

webkit-text-stroke-width: 0px">

3. 实例分析

需求:计算每个用户每天

某种行为消费次数、消费总额、消费均额、消费最大额、消费最小额

在几个终端支付、最常支付终端号、最常支付终端号的支付次数、最少支付终端号、最少支付终端号的支付次数

某种行为最常消费发生时间段、最常消费发生时间段的消费次数、最少消费发生时间段、最少消费发生时间段的消费次数

某种行为最早消费时间、最晚消费时间

原始数据信息:306626 x 9


具体选择哪种方法处理,根据实际情况确定,在面对复杂计算时,transform() 与apply()结合使用往往会有意想不到的效果!

需要注意的是,在与apply()一起使用时,transform需要进行去重操作,一般是通过指定一或多个列完成。

此外,匿名函数永远不是一个很好的办法,在进行简单计算时,无论是使用transfrom、agg还是apply,都要尽可能使用自带方法!!!

4. 小技巧

在使用apply()方法处理大数据级时,可以考虑使用joblib中的多线程/多进程模块构造相应函数执行计算,以下分别是采用多进程和单进程的耗时时长。

可以看到,在260W的数据集上,多进程比单进程的计算速度可以提升约17%~61%  。

总结

以上所述是小编给大家介绍的pandas中apply和transform方法的性能比较,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 问题内容: 你能否通过基本示例告诉我何时使用这些矢量化方法? 我看到这是一种方法,而其余都是方法。我糊涂了约和,虽然方法。为什么我们有两种将函数应用于DataFrame的方法?同样,简单的例子可以很好地说明用法! 问题答案: 另一个常见的操作是将一维数组上的函数应用于每一列或每一行。DataFrame的apply方法正是这样做的: 许多最常见的数组统计信息(例如sum和mean)都是DataFra

  • 本文向大家介绍Java中的Vector和ArrayList区别及比较,包括了Java中的Vector和ArrayList区别及比较的使用技巧和注意事项,需要的朋友参考一下 Vector  和  ArrayList 比较 有时用Vector更好一点,有时用ArrayList更好一点,不能准确容易的给出答案,因为要视具体情况而定,有四个主要考虑的因素: 1:API 2: 同步(synchronizat

  • 本文向大家介绍js中apply和Math.max()函数的问题及区别介绍,包括了js中apply和Math.max()函数的问题及区别介绍的使用技巧和注意事项,需要的朋友参考一下 下面给大家介绍js中apply和Math.max()函数的问题,具体内容如下所示: 一直搞不懂为什么这样可以算出一个数组的最大值?一直想不明白,请js高手指教一下。 答案1 Function.apply()是JS的一个O

  • 问题内容: 我不知道熊猫和功能之间的区别。 以以下示例为例:我加载数据集,执行,定义一个简单函数,然后输入user或。 如您所见,在使用和之后,函数中的print语句得到相同的输出。另一方面,结果是不同的。这是为什么? 使用: 使用 问题答案: 将功能应用于每个组(您的)。您的函数返回1,因此对于3个组,您最终都将获得1值。 汇总 每个 组的 每个列(功能) ,因此最终每个组的每个列都有一个值。

  • 本文向大家介绍java.lang.Void 与 void的比较及使用方法介绍,包括了java.lang.Void 与 void的比较及使用方法介绍的使用技巧和注意事项,需要的朋友参考一下 void不是函数,是方法的修饰符,void的意思是该方法没有返回值,意思就是方法只会运行方法中的语句,但是不返回任何东西。 java.lang.Void是一种类型。例如给Void引用赋值null。 通过Void类

  • 本文向大家介绍pandas map(),apply(),applymap()区别解析,包括了pandas map(),apply(),applymap()区别解析的使用技巧和注意事项,需要的朋友参考一下 基础 以下操作基于python 3.6 windows 10 环境下 通过 将通过实例来演示三者的区别 map()方法 通过df.(tab)键,发现df的属性列表中有apply() 和 apply