pandas.apply()函数

1、介绍

apply函数是pandas里面所有函数中自由度最高的函数。该函数如下:

DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)

该函数最有用的是第一个参数,这个参数是函数,相当于C/C++的函数指针。

这个函数需要自己实现,函数的传入参数根据axis来定,比如axis = 1,就会把一行数据作为Series的数据 结构传入给自己实现的函数中,我们在函数中实现对Series不同属性之间的计算,返回一个结果,则apply函数 会自动遍历每一行DataFrame的数据,最后将所有结果组合成一个Series数据结构并返回。

2、样例

import numpy as np
import pandas as pd

if __name__ == ‘__main__‘:
    f = lambda x : x.max() - x.min()
    df = pd.DataFrame(np.random.randn(4, 3), columns=list(‘bde‘), index=[‘utah‘, ‘ohio‘, ‘texas‘, ‘oregon‘]) #columns表述列标, index表述行标
    print(df)

    t1 = df.apply(f) #df.apply(function, axis=0),默认axis=0,表示将一列数据作为Series的数据结构传入给定的function中
    print(t1)

    t2 = df.apply(f, axis=1)
    print(t2)

输出结果如下所示:

               b         d         e
utah    1.950737  0.318299  0.387724
ohio    1.584464 -0.082965  0.984757
texas   0.477283 -2.774454 -0.532181
oregon -0.851359 -0.654882  1.026698

b    2.802096
d    3.092753
e    1.558879
dtype: float64
utah      1.632438
ohio      1.667428
texas     3.251737
oregon    1.878057
dtype: float64

3、性能比较

import numpy as np
import pandas as pd

def my_test(a, b):
    return a + b

if __name__ == ‘__main__‘:
    df = pd.DataFrame({‘a‘:np.random.randn(6),
                       ‘b‘:[‘foo‘, ‘bar‘] * 3,
                       ‘c‘:np.random.randn(6)})

    print(df)

    df[‘value1‘] = df.apply(lambda row: my_test(row[‘a‘], row[‘c‘]), axis=1)
    print(df)

    df[‘vaule2‘] = df[‘a‘] + df[‘c‘]
    print(df)

输出结果如下:

          a    b         c
0 -1.745471  foo  0.723341
1 -0.378998  bar  0.229188
2 -1.468866  foo  0.788046
3 -1.323347  bar  0.323051
4 -1.894372  foo  2.216768
5 -0.649059  bar  0.858149

          a    b         c    value1
0 -1.745471  foo  0.723341 -1.022130
1 -0.378998  bar  0.229188 -0.149810
2 -1.468866  foo  0.788046 -0.680820
3 -1.323347  bar  0.323051 -1.000296
4 -1.894372  foo  2.216768  0.322396
5 -0.649059  bar  0.858149  0.209089

          a    b         c    value1    vaule2
0 -1.745471  foo  0.723341 -1.022130 -1.022130
1 -0.378998  bar  0.229188 -0.149810 -0.149810
2 -1.468866  foo  0.788046 -0.680820 -0.680820
3 -1.323347  bar  0.323051 -1.000296 -1.000296
4 -1.894372  foo  2.216768  0.322396  0.322396
5 -0.649059  bar  0.858149  0.209089  0.209089

注意:当数据量很大时,对于简单的逻辑处理建议方法2(个人处理几百M数据集时,方法1花时200s左右,方法2花时10s)!!!

版权声明:本文为CSDN博主「鸿燕藏锋」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yanjiangdi/article/details/94764562

原文地址:https://www.cnblogs.com/mliu222/p/12003794.html

时间: 2024-08-01 00:56:54

pandas.apply()函数的相关文章

pandas DataFrame apply()函数(1)

之前已经写过pandas DataFrame applymap()函数 还有pandas数组(pandas Series)-(5)apply方法自定义函数 pandas DataFrame 的 applymap() 函数和pandas Series 的 apply() 方法,都是对整个对象上个各个值进行单独处理,返回一个新的对象. 而pandas DataFrame 的  apply() 函数,虽然也是作用于DataFrame的每个值,但是接受的参数不是各个值本身,而是DataFrame里各行(

pandas中agg()函数和apply()函数的区别

如果对自定义top_n的调用采用agg函数的话,那么报出的错误将是 说明了一个问题,使用agg函数调用top_n的话,它在尝试对每一个分组使用top_n进行聚合,但是top_n的作用是排序,不是聚合,所以肯定会报错 所以在这种情况下,只能采用apply函数,而不能采用agg函数,agg函数内调用的函数只能对分组进行聚合使用. 新手入门,个人理解,如有错误,希望谅解

pandas 常用函数整理

pandas常用函数整理,作为个人笔记. 仅标记函数大概用途做索引用,具体使用方式请参照pandas官方技术文档. 约定 from pandas import Series, DataFrame import pandas as pd import numpy as np 带.的为Series或者DataFrame对象的方法,只列举了部分关键字参数. 1.基础 .values 获取值,返回array对象 .index 获取(行)索引,返回索引对象 Series( index=) 创建Series

Pandas的函数应用、层级索引、统计计算

1.Pandas的函数应用 1.apply 和 applymap 1. 可直接使用NumPy的函数 示例代码: # Numpy ufunc 函数 df = pd.DataFrame(np.random.randn(5,4) - 1) print(df) print(np.abs(df)) 运行结果: 0 1 2 3 0 -0.062413 0.844813 -1.853721 -1.980717 1 -0.539628 -1.975173 -0.856597 -2.612406 2 -1.277

call()函数、apply()函数区别与意义

使用apply函数或call函数的意义: 在面对对象编程过程中,当A对象调用其他对象而非A对象方法是,该方法中所有的this引用都指向此方法所在的对象,而不是当前代码的上下文即A对象, 为了保持this的原来的指向(即A对象),则需要使用apply或call函数. apply()和call()的区别: apply和call,它们的作用都是将函数绑定到另外一个对象上去运行 原型分别是 Function.prototype.apply(thisArg,argArray); Function.prot

JavaScript中bind、call、apply函数用法详解

在给我们项目组的其他程序介绍 js 的时候,我准备了很多的内容,但看起来效果不大,果然光讲还是不行的,必须动手.前几天有人问我关于代码里 call() 函数的用法,我让他去看书,这里推荐用js 写服务器的程序猿看<javascript编程精粹> 这本书,crockford大神果然不是盖的.之后我在segmentfault上又看到了类似的问题,那边解答之后干脆这里记一笔. 首先,关于 js 定义类或对象的方法,请参看w3school 的这里的这里,写的非常详细和清晰,我不再赘言了. 为了介绍 b

Javascript中bind、call、apply函数用法

js 里函数调用有 4 种模式:方法调用.正常函数调用.构造器函数调用.apply/call 调用. 同时,无论哪种函数调用除了你声明时定义的形参外,还会自动添加 2 个形参,分别是 this 和arguments. arguments 不涉及到上述 3 个函数,所以这里只谈 this.this 的值,在上面 4 中调用模式下,分别会绑定不同的值.分别来说一说: 方法调用: 这个很好理解,函数是一个对象的属性,比如 var a = { v : 0, f : function(xx) { this

js中bind、call、apply函数的用法

最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web 的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站.但真正大规模的使用 js 这还是第一次.我也是初生牛犊不怕虎,这次服务器居然抛弃 C++ 和 lua 的正统搭配,而尝试用 nodejs 来写游戏服务器,折腾的自己要死要活的我也是醉了. 在给我们项目组的其他程序介绍 js 的时候,我准备了很多的内容,但看起来效果不大,果然光讲还是不行的,必须动手.

(原)torch的apply函数

转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6221633.html torch中的apply函数通过可以不断遍历model的各个模块.实际上其使用的是深度优先算法. 其具体代码如下所示(代码见torch/install/share/lua/5.1/nn/Module.lua): -- Run a callback (called with the module as an argument) in preorder over this -- m