• Python apply函数


    Python 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
    
    
    f = lambda x: x.max()-x.min()
    
    df = pd.DataFrame(np.random.randn(4,3),columns=list('bde'),index=['utah', 'ohio', 'texas', 'oregon'])
    print(df)
    
    t1 = df.apply(f)
    print(t1)
    
    t2 = df.apply(f, axis=1)
    print(t2)

    输出结果如下所示:

                   b         d         e
    utah    1.106486  0.101113 -0.494279
    ohio    0.955676 -1.889499  0.522151
    texas   1.891144 -0.670588  0.106530
    oregon -0.062372  0.991231  0.294464
    
    b    1.953516
    d    2.880730
    e    1.016430
    dtype: float64
    
    utah      1.600766
    ohio      2.845175
    texas     2.561732
    oregon    1.053603
    dtype: float64

    3、性能比较

    df = pd.DataFrame({'a': np.random.randn(6),
                       'b': ['foo', 'bar'] * 3,
                       'c': np.random.randn(6)})
    
    
    def my_test(a, b):
        return a + b
    
    
    print(df)
    
    
    df['Value'] = df.apply(lambda row: my_test(row['a'], row['c']), axis=1) # 方法1
    print(df)
    
    df['Value2'] = df['a'] + df['c']  # 方法2
    print(df)

    输出结果如下:

              a    b         c
    0 -1.194841  foo  1.648214
    1 -0.377554  bar  0.496678
    2  1.524940  foo -1.245333
    3 -0.248150  bar  1.526515
    4  0.283395  foo  1.282233
    5  0.117674  bar -0.094462
    
              a    b         c     Value
    0 -1.194841  foo  1.648214  0.453374
    1 -0.377554  bar  0.496678  0.119124
    2  1.524940  foo -1.245333  0.279607
    3 -0.248150  bar  1.526515  1.278365
    4  0.283395  foo  1.282233  1.565628
    5  0.117674  bar -0.094462  0.023212
    
              a    b         c     Value    Value2
    0 -1.194841  foo  1.648214  0.453374  0.453374
    1 -0.377554  bar  0.496678  0.119124  0.119124
    2  1.524940  foo -1.245333  0.279607  0.279607
    3 -0.248150  bar  1.526515  1.278365  1.278365
    4  0.283395  foo  1.282233  1.565628  1.565628
    5  0.117674  bar -0.094462  0.023212  0.023212

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


    1、介绍

  • 相关阅读:
    SD卡性能测试
    在程序内动态获取svn版本号
    在SharePoint 2010程序中使用Session
    图片预读
    CSS图片垂直居中方法整理集合 !(常见问题解答)
    cpld的入门交流之二:秒信号发生器
    基于json数据的jQuery无限级下拉菜单插件
    MySQL 按指定字段自定义列表排序
    10张图让你更了解博客
    IE6 CSS bug: position:relative变成了absolute
  • 原文地址:https://www.cnblogs.com/yjd_hycf_space/p/11140695.html
Copyright © 2020-2023  润新知