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计算进行更新。如果添加新行,则需要再次执行代码,以便​​更新。