Python 在股票组合中识别股票,并按相反顺序对特定股票应用数字运算
假设我有一个如下所示的数据帧Python 在股票组合中识别股票,并按相反顺序对特定股票应用数字运算,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,假设我有一个如下所示的数据帧 Stock open high low close Avg 0 SBIN 255.85 256.00 255.80 255.90 Nan 1 HDFC 1222.25 1222.45 1220.45 1220.45 Nan 2 SBIN 255.95 255.95 255.85 255.85 Nan 3
Stock open high low close Avg
0 SBIN 255.85 256.00 255.80 255.90 Nan
1 HDFC 1222.25 1222.45 1220.45 1220.45 Nan
2 SBIN 255.95 255.95 255.85 255.85 Nan
3 HDFC 1222.00 1222.50 1221.70 1221.95 Nan
4 SBIN 255.80 256.00 255.80 255.95 255.9
5 HDFC 1221.90 1222.00 1221.55 1221.70 1221.366667
6 SBIN 255.85 255.95 255.70 255.80 255.8666667
7 HDFC 1222.00 1222.00 1221.45 1221.95 1221.866667
8 SBIN 255.80 255.95 255.70 255.80 255.85
9 HDFC 1222.00 1222.00 1221.25 1221.90 1221.85
10 SBIN 255.75 255.80 255.60 255.65 255.75
11 HDFC 1222.00 1222.00 1221.40 1221.80 1221.88333333
这是我截图的df链接
现在average列是该特定股票前三次收盘的平均值。如何在python中实现这一点?您可以使用
groupby
和rolling
df['Avg'] = df.groupby('Stock', as_index=False)['close'].rolling(3).mean().reset_index(0,drop=True)
df
Out[1]:
Stock open high low close Avg
0 SBIN 255.85 256.00 255.80 255.90 NaN
1 HDFC 1222.25 1222.45 1220.45 1220.45 NaN
2 SBIN 255.95 255.95 255.85 255.85 NaN
3 HDFC 1222.00 1222.50 1221.70 1221.95 NaN
4 SBIN 255.80 256.00 255.80 255.95 255.900000
5 HDFC 1221.90 1222.00 1221.55 1221.70 1221.366667
6 SBIN 255.85 255.95 255.70 255.80 255.866667
7 HDFC 1222.00 1222.00 1221.45 1221.95 1221.866667
8 SBIN 255.80 255.95 255.70 255.80 255.850000
9 HDFC 1222.00 1222.00 1221.25 1221.90 1221.850000
10 SBIN 255.75 255.80 255.60 255.65 255.750000
11 HDFC 1222.00 1222.00 1221.40 1221.80 1221.883333
正如我从你们的df中了解到的,你们正在试图计算一些类似移动平均线的指标 要做到这一点,您只需在迭代中使用:
for i in range(0, df.shape[0] - 2):
df.loc[df.index[i + 2], 'AVG'] = np.round(((df.iloc[i, 1] + df.iloc[i + 1, 1] + df.iloc[i + 2, 1]) / 3), 1)
在pd.loc子句中,您指定了要计算度量的列,我使用了own
此外(如果您想要更具体的指标),您可以尝试使用滚动法计算平均值:
df['AVG'] = df.iloc[:, 1].rolling(window = 3).mean()
必须使用要计算度量的列,而不是1。在“窗口列”中,指定要计算此值的上一列数
希望这会有帮助 @ansev如果没有
应用
,您将如何实现结果?我想说,作为_index=False,对不起,我可以在现有的数据帧上使用它,其中Avg列已经存在,并且添加了任何带有股票名称的新条目,比如带有新值的SBIN,即只打开、高、低和关闭。我可以期望Avg列自动更新吗。根据我在网上看到的情况,滚动适用于完整的数据帧。@MichaelGarder-我尝试了你的解决方案,但是添加的新行只有open、high、low,close没有使用我们使用rolling提供的avg计算进行更新。如果添加新行,则需要再次执行代码,以便更新。