我在里面运行一个叫做计算对冲比率的函数 熊猫。滚动应用. 函数在调用自身时起作用, 但在rolling_apply内部,它会抛出以下错误:
regression = pandas.ols(x=df[xsymbol], y=df[ysymbol])
IndexError: only integers, slices (
:
), ellipsis (...
), numpy.newaxis (None
) and integer or boolean arrays are valid indices
以下是计算套期保值比率的函数:
def calculate_hedgeratio(df, xsymbol, ysymbol):
import pandas
from scipy import odr
import numpy
regression = pandas.ols(x=df[xsymbol], y=df[ysymbol])
m = regression.beta[0]
n = regression.beta[1]
model = odr.Model(lambda B,x: (B[0]*x + B[1]))
data = odr.RealData(df[xsymbol].values,df[ysymbol].values, sx=numpy.std(df[xsymbol].values), sy=numpy.std(df[ysymbol].values))
myodr = odr.ODR(data, model, beta0=[m, n])
myoutput = myodr.run()
results = [myoutput.beta[0], myoutput.beta[1], myoutput.res_var]
return results
这是我称之为的函数:
^{pr2}$原因是什么?在
在calculate\uhedgeratio中,
df
实际上是一个numpy数组,而不是一个数据帧(这就是为什么会出现索引错误)。在这是由
rolling_apply
中的lambda
函数引起的,后者只能应用于一个序列。当这个rolling_apply
被应用到一个数据帧时,它实际上分别对每一列执行计算。在相关问题 更多 >
编程相关推荐