首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在DataFrame上滚动平均回报

在DataFrame上滚动平均回报
EN

Stack Overflow用户
提问于 2018-10-15 08:02:02
回答 2查看 2.5K关注 0票数 1

我想为每一个5年(60个月)滚动回报的股票添加列到下面的Dataframe。以下代码用于获取1995至2010年期间的财务数据。

代码语言:javascript
运行
复制
quandl.ApiConfig.api_key = 'Enter Key'
stocks = ['MSFT', 'AAPL', 'WMT', 'GE', 'KO']
stockdata = quandl.get_table('WIKI/PRICES', ticker = stocks, paginate=True,
                    qopts = { 'columns': ['date', 'ticker', 'adj_close'] },
                    date = { 'gte': '1995-1-1', 'lte': '2010-12-31' })

# Setting date as index with columns of tickers and adjusted closing price

df = stockdata.pivot(index = 'date',columns='ticker')
df.index = pd.to_datetime(df.index)
df.resample('1M').mean()
df = df.pct_change()

df.head()
Out[1]: 
              rets                                                    
ticker          AAPL        BA         F        GE       JNJ        KO   
 date                                                                     
1995-01-03       NaN       NaN       NaN       NaN       NaN       NaN   
1995-01-04  0.026055 -0.002567  0.026911  0.000000  0.006972 -0.019369   
1995-01-05 -0.012697  0.002573 -0.008735  0.002549 -0.002369 -0.004938   
1995-01-06  0.080247  0.018824  0.000000 -0.004889 -0.006758  0.000000   
1995-01-09 -0.019048  0.000000  0.017624 -0.009827 -0.011585 -0.014887 

df.tail()
Out[2]: 
              rets
ticker          AAPL        BA         F        GE       JNJ        KO   
 date                                                                     
2010-12-27  0.003337 -0.004765  0.005364  0.008315 -0.005141 -0.007777   
2010-12-28  0.002433  0.001699 -0.008299  0.007147  0.001938  0.004457   
2010-12-29 -0.000553  0.002929  0.000598 -0.002729  0.001289  0.001377   
2010-12-30 -0.005011 -0.000615 -0.002987 -0.004379 -0.003058  0.000764   
2010-12-31 -0.003399  0.003846  0.005992  0.005498 -0.001453  0.004122 

任何帮助如何做这将是令人敬畏的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-15 22:38:30

问题是列中的多层索引。我们可以从选择第二级索引开始,然后滚动平均值开始工作:

代码语言:javascript
运行
复制
means = df['rets'].rolling(60).mean() 
means.tail() 

给予:

票数 1
EN

Stack Overflow用户

发布于 2018-10-15 17:35:14

您所收到的错误是由于您将整个数据文件传递到滚动函数中,因为您的框架使用了多个索引。您不能将多索引框架传递给滚动函数,因为滚动只接受1列的numpy数组。您可能需要创建一个for循环,并按每个滴答返回值。

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

https://stackoverflow.com/questions/52812195

复制
相关文章

相似问题

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