首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有3个输入和3个输出的pandas.rolling_apply()

具有3个输入和3个输出的pandas.rolling_apply()
EN

Stack Overflow用户
提问于 2015-07-25 20:57:06
回答 1查看 347关注 0票数 1

我正在运行一个名为calculate_hedgeratio I pandas.rolling_apply的函数。函数本身调用时工作正常,但是在rolling_apply内部它会引发以下错误:

回归= pandas.ols(x=dfxsymbol,y=dfysymbol) IndexError:只有整数、切片(:)、省略号(...)、numpy.newaxis (None)和整数或布尔数组才是有效的索引。

下面是函数calculate_hedgeratio:

代码语言:javascript
复制
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

这是我称之为它的函数:

代码语言:javascript
复制
def simple_Spreadtest(symbol1, symbol2, startdate, enddate, lookbackperiod):
    import pandas
    import numpy

    df=pandas.DataFrame()
    df[symbol1]=numpy.random.rand(1000)
    df[symbol2]=numpy.random.rand(1000)
    df['m','n','Chired'] = pandas.rolling_apply(df,lookbackperiod, lambda x: calculate_hedgeratio(x, symbol1, symbol2))

    return df

'Main Code:'


symbol1 = 'A'   
symbol2 = 'B' 
lookbackperiod = 250
import datetime
startdate = datetime.datetime(1990, 1, 1)
enddate = datetime.datetime(2015, 7, 31)

df = simple_Spreadtest(symbol1, symbol2, startdate, enddate, lookbackperiod)

原因是什么?

EN

回答 1

Stack Overflow用户

发布于 2015-07-26 01:31:20

在calculate_hedgeratio中,df实际上是一个numpy数组,而不是DataFrame (这就是为什么您要得到一个索引错误)。

这是由您的lambda函数在您的rolling_apply,后者只能应用于一个系列。当将此rolling_apply应用于DataFrame时,它实际上分别对每一列执行其计算。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31631052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档