首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算大df中每个股票的5种不同滚动均值

计算大df中每个股票的5种不同滚动均值
EN

Stack Overflow用户
提问于 2017-09-04 06:27:18
回答 1查看 919关注 0票数 0

我有一个关于股票价格的数据帧。下面是一个例子,但这适用于4500行的股票价格

代码语言:javascript
运行
复制
>>
DATE        MMM     US Equity   AIR     US Equity
1/3/2000    47.19               17.56
1/4/2000    45.31               17.63
1/5/2000    46.63               17.81
1/6/2000    50.38               17.94

我使用迭代项创建了移动平均值,如下所示

代码语言:javascript
运行
复制
>>>for stockname, stock in df.iteritems():     
# Create 10,30,50,100 and 200D MAvgs                             
MA10D = stock.rolling(10).mean()
MA30D = stock.rolling(30).mean()
MA50D = stock.rolling(50).mean()
MA100D = stock.rolling(100).mean()
MA200D = stock.rolling(200).mean()
df_stockname = pd.concat([df[[1]],MA10D,MA30D,MA50D,MA100D,MA200D],axis=1)

问题是这只显示了循环中的最后一项( AIR US Equity股票)。我如何访问循环中的第一只股票的MA10D、MA30D等(例如,作为df中的第一只股票的MMM股票)。我该怎么做呢?

我最终希望能够创建两个数据框,每个数据框对应一个股票价格,分别是MA10D、MA30D、MA50D、MA100D和MA200D。因此,我最终需要一种方法来命名每个dataframe并在concat中更改df[#]。

EN

回答 1

Stack Overflow用户

发布于 2017-09-04 07:47:27

这就是你想要做的吗?

代码语言:javascript
运行
复制
results = {}

# Create 10,30,50,100 and 200D MAvgs                             
for stockname, stock in df.iteritems():
    df_copy = pd.DataFrame(stock)
    df_copy[stockname + '_MA10D'] = stock.rolling(10).mean()
    df_copy[stockname + '_MA30D'] = stock.rolling(30).mean()
    df_copy[stockname + '_MA50D'] = stock.rolling(50).mean()
    df_copy[stockname + '_MA100D'] = stock.rolling(100).mean()
    df_copy[stockname + '_MA200D'] = stock.rolling(200).mean()
    results[stockname] = df_copy

下面是应该执行的完整版本和结果:

代码语言:javascript
运行
复制
data = {
    'MMM': (47.19, 45.31, 46.63, 50.38),
    'AIR': (17.56, 17.63, 17.81, 17.94)
}
index = pd.Index(pd.date_range("01/03/2000", "01/06/2000"), name='DATE')
df = pd.DataFrame(data=data, index=index)

results = {}

# Create 10,30,50,100 and 200D MAvgs                             
for stockname, stock in df.iteritems():
    df_copy = pd.DataFrame(stock)
    df_copy[stockname + '_MA10D'] = stock.rolling(10).mean()
    df_copy[stockname + '_MA30D'] = stock.rolling(30).mean()
    df_copy[stockname + '_MA50D'] = stock.rolling(50).mean()
    df_copy[stockname + '_MA100D'] = stock.rolling(100).mean()
    df_copy[stockname + '_MA200D'] = stock.rolling(200).mean()
    results[stockname] = df_copy

print(results['MMM'])
print(results['AIR'])

输出:

代码语言:javascript
运行
复制
              MMM  MMM_MA10D  MMM_MA30D  MMM_MA50D  MMM_MA100D  MMM_MA200D
DATE                                                                      
2000-01-03  47.19        NaN        NaN        NaN         NaN         NaN
2000-01-04  45.31        NaN        NaN        NaN         NaN         NaN
2000-01-05  46.63        NaN        NaN        NaN         NaN         NaN
2000-01-06  50.38        NaN        NaN        NaN         NaN         NaN
              AIR  AIR_MA10D  AIR_MA30D  AIR_MA50D  AIR_MA100D  AIR_MA200D
DATE                                                                      
2000-01-03  17.56        NaN        NaN        NaN         NaN         NaN
2000-01-04  17.63        NaN        NaN        NaN         NaN         NaN
2000-01-05  17.81        NaN        NaN        NaN         NaN         NaN
2000-01-06  17.94        NaN        NaN        NaN         NaN         NaN
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46028330

复制
相关文章

相似问题

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