我需要将几个参数传递给pd.rolling_apply
的目标函数我的目标函数如下所示:
def complexFunction(i,j,k,l,verbosity=False):
...
return 0.0
参数位置是否正确?什么是规范方式?
答案 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}}