我目前正在尝试计算几只股票的数据集的简单移动平均线。为了简化工作,我仅在两家公司(和4天的时间)上尝试了代码,但是输出似乎有些问题。下面是我的代码。
for index, row in df3.iloc[4:].iterrows():
if df3.loc[index,'CompanyId'] == df3.loc[index-4,'CompanyId']:
df3['SMA4'] = df3.iloc[:,1].rolling(window=4).mean()
else:
df3['SMA4'] = 0
这是输出:输出
数据框按日期和公司ID排序。所以需要发生的是,当公司编号与代码中规定的不相等时,输出应该为零,因为我无法计算两个不同公司的移动平均值。相反,它在第7、8、9行输出了两家公司的移动平均线。
采用 groupby.rolling
df['SMA4']=df.groupby('CompanyId',sort=False).rolling(window=4).Price.mean().reset_index(drop='CompanyId')
print(df)
CompanyId Price SMA4
0 1 75 NaN
1 1 74 NaN
2 1 77 NaN
3 1 78 76.00
4 1 80 77.25
5 1 79 78.50
6 1 80 79.25
7 0 10 NaN
8 0 9 NaN
9 0 12 NaN
10 0 11 10.50
11 0 11 10.75
12 0 8 10.50
13 0 9 9.75
14 0 8 9.00
15 0 8 8.25
16 0 11 9.00
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句