将Pandas groupby()+ apply()与参数一起使用
我想df.groupby()
结合使用apply()
将功能应用于每组的每一行。
我通常使用以下代码,该代码通常可以正常工作(请注意,这是不带的groupby()
):
df.apply(myFunction, args=(arg1,))
随着groupby()
我试过如下:
df.groupby('columnName').apply(myFunction, args=(arg1,))
但是,出现以下错误:
TypeError:myFunction()获得了意外的关键字参数’args’
因此,我的问题是: 我如何使用groupby()
,并apply()
与需要参数的函数?
-
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