将参数传递给rolling_apply

时间:2015-08-04 02:10:32

标签: python pandas

我需要将几个参数传递给pd.rolling_apply

的目标函数

我的目标函数如下所示:

  def complexFunction(i,j,k,l,verbosity=False):
    ...
    return 0.0

参数位置是否正确?什么是规范方式?

3 个答案:

答案 0 :(得分:4)

根据documentation(您已链接),您可以使用args关键字传递参数,第一个参数将由rolling_apply传递,您可以定义其余的参数作为元组并将其传递给args关键字参数。示例 -

 pd.rolling_apply(df,<window>,complexFunction,args=(j,k,l))

示例/演示 -

In [3]: df = pd.DataFrame([[1,2,3],[4,5,6]],columns = ['A','B','C'])

In [8]: def func(i,j,s):
   ...:     print(i,j,s)
   ...:     print('next')
   ...:     return i
   ...:

In [9]: pd.rolling_apply(df,1,func,args=(1,2))
[ 1.] 1 2
next
[ 4.] 1 2
next
[ 2.] 1 2
next
[ 5.] 1 2
next
[ 3.] 1 2
next
[ 6.] 1 2
next

答案 1 :(得分:0)

我通常将我的函数作为单个输入连接,例如。

  def complexFunction(row,verbosity=False):
    i = row.i
    j = row.j
    k = row.k

    return 0.0

  pd.rolling_apply(df, complexFunction)

答案 2 :(得分:0)

以下是functools使用from functools import partial def complex_function(data, x, y): # some calculations return sum(data) * x * y my_partial_func = partial(complex_function, x=2, y=5) ser = pd.Series(np.arange(10)) pd.rolling_apply(ser, window=5, func=my_partial_func) 0 NaN 1 NaN 2 NaN 3 NaN 4 100 5 150 6 200 7 250 8 300 9 350 dtype: float64 的方法。

{{1}}