如何在数据框行中找到 return 的股票代码?

How to find the return of stock Tickers in rows of dataframe?

我正在尝试每天使用 :

查找我的代码 return
((close - previous close)/previous close)

我使用

在数据框中创建了 Return 列
DF['Return']=((DF.Close - DF.Close.shift(1))/DF.Close.shift(1)). 

事实是,我的第一行对于 ABM 股票是正确的,因为没有之前的收盘价,但是第二行也应该 return NaN,因为 MMM 不应该有之前的收盘价。我该如何解决这个问题。

    Date       Ticker   Close   Div  High       Low         Open     Splits  Volume     Return
0   2019-06-18  ABT  80.868233  0.0  81.033031  79.414117   79.927903   0.0  6253000.0  NaN
1   2019-06-18  MMM  160.269012 0.0  160.651364 156.268355  156.529469  0.0  3623000.0  0.981854
2   2019-06-19  ABT  81.750397  0.0  81.915195  80.509552   80.848845   0.0  4113400.0  -0.489918
3   2019-06-19  MMM  159.233871 0.0  161.154934 159.038029  160.287664  0.0  2777400.0  0.947805
4   2019-06-20  ABT  82.341743  0.0  82.710117  81.740706   82.244796   0.0  6436400.0  -0.482888

.....

我的输出应该是这样的:

    Date       Ticker   Close   Div  High       Low         Open     Splits  Volume     Return
0   2019-06-18  ABT  80.868233  0.0  81.033031  79.414117   79.927903   0.0  6253000.0  NaN
1   2019-06-18  MMM  160.269012 0.0  160.651364 156.268355  156.529469  0.0  3623000.0  NaN
2   2019-06-19  ABT  81.750397  0.0  81.915195  80.509552   80.848845   0.0  4113400.0  0.010909
3   2019-06-19  MMM  159.233871 0.0  161.154934 159.038029  160.287664  0.0  2777400.0  -0.00646
4   2019-06-20  ABT  82.341743  0.0  82.710117  81.740706   82.244796   0.0  6436400.0  0.007234

.....

您需要先使用 groupby,然后再使用 shift,如下所示:

DF['Return']=((DF.Close - DF.groupby('Ticker').Close.shift(1))/DF.groupby('Ticker').Close.shift(1))

我不知道你之前的所有代码,所以让我做一个完整的例子以防万一:

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 1, 2], 'B': [4, 5, 6, 7]})
df['C'] = (df['B'] - df.groupby('A')['B'].shift())/df.groupby('A')['B'].shift()