将Pandas groupby()+ apply()与参数一起使用

发布于 2021-01-29 15:19:13

我想df.groupby()结合使用apply()将功能应用于每组的每一行。

我通常使用以下代码,该代码通常可以正常工作(请注意,这是不带的groupby()):

df.apply(myFunction, args=(arg1,))

随着groupby()我试过如下:

df.groupby('columnName').apply(myFunction, args=(arg1,))

但是,出现以下错误:

TypeError:myFunction()获得了意外的关键字参数’args’

因此,我的问题是: 我如何使用groupby(),并apply()与需要参数的函数?

关注者
0
被浏览
143
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    pandas.core.groupby.GroupBy.apply没有 命名
    参数args,但是pandas.DataFrame.apply有。

    所以试试这个:

    df.groupby('columnName').apply(lambda x: myFunction(x, arg1))
    

    @Zero建议:

    df.groupby('columnName').apply(myFunction, ('arg1'))
    

    演示:

    In [82]: df = pd.DataFrame(np.random.randint(5,size=(5,3)), columns=list('abc'))
    
    In [83]: df
    Out[83]:
       a  b  c
    0  0  3  1
    1  0  3  4
    2  3  0  4
    3  4  2  3
    4  3  4  1
    
    In [84]: def f(ser, n):
        ...:     return ser.max() * n
        ...:
    
    In [85]: df.apply(f, args=(10,))
    Out[85]:
    a    40
    b    40
    c    40
    dtype: int64
    

    使用时,GroupBy.apply您可以传递一个命名参数:

    In [86]: df.groupby('a').apply(f, n=10)
    Out[86]:
        a   b   c
    a
    0   0  30  40
    3  30  40  40
    4  40  20  30
    

    参数元组:

    In [87]: df.groupby('a').apply(f, (10))
    Out[87]:
        a   b   c
    a
    0   0  30  40
    3  30  40  40
    4  40  20  30
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看