[英]Compute 5 different rolling-means of each stock in large df
I have a Dataframe with stock prices. 我有一个包含股价的数据框。 Example below but this goes on for 4500 lines of stock prices
下面的示例,但是对于股票价格的4500行
>>
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
I have created moving average using iteritems with the follow 我使用以下迭代项目创建了移动平均线
>>>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)
The problem is this only shows the last item in the loop (the AIR US Equity stock). 问题在于,这仅显示循环中的最后一项(AIR US股票)。 How do I access MA10D, MA30D, etc for the first stock in the loop (ie the MMM US Equity which is the first stock in the df).
如何访问循环中的第一只股票(即MMM美国股票,即df中的第一只股票)的MA10D,MA30D等。 How can I do this
我怎样才能做到这一点
I ultimately want to be able to create two data frames, one for each stock with the stock price, MA10D, MA30D, MA50D, MA100D and MA200D. 我最终希望能够创建两个数据框,每个股票的价格分别为MA10D,MA30D,MA50D,MA100D和MA200D。 So I ultimate need a way to name each dataframe and change the df[[#]] within the concat.
因此,我最终需要一种方法来命名每个数据帧并在concat中更改df [[#]]。
Is this what you are trying to do? 这是您要做什么?
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
Here is a complete version that should execute and the results: 这是应该执行的完整版本及其结果:
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'])
Output: 输出:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.