时间序列数据的历史最小值,而不是Panda中的.min



我有一个不同股票及其在不同时间点的股价的数据框架,看起来像:

Stock_ID   Price   Date
1          45      2022-11-22
1          43      2022-11-21 
1          46      2022-11-20
1          49      2022-11-19
2          81      2021-10-19
2          79      2021-10-13
2          63      2021-10-09
2          74      2021-10-07
2          77      2021-09-30
3          32      2022-03-16
3          39      2022-02-14
3          30      2022-02-01

我想添加一个新的列Historical_low,它计算该股票的历史最小值,因此所需的结果看起来像

Stock_ID   Price   Date        Historical_low
1          45      2022-11-22  43
1          43      2022-11-21  46
1          46      2022-11-20  49
1          49      2022-11-19  np.nan
2          81      2021-10-19  63
2          79      2021-10-13  63
2          63      2021-10-09  74
2          74      2021-10-07  77
2          77      2021-09-30  np.nan
3          32      2022-03-16  30
3          39      2022-02-14  30
3          30      2022-02-01  np.nan

这是我的尝试:

df.sort_values(['Stock_ID','Date], ascending=[True, False], inplace=True)
df['Historical_low'] = df.gropuby('Stock_ID')['Price'].min()

但这给了我特定股票的全球最低股价,这意味着对于某些行,我使用的是未来的信息。

提前感谢您的帮助。

IIUC,您可以使用移位的groupby.cummin:

df['Historical_low'] = (df
.sort_values(by='Date', ascending=True)
.groupby('Stock_ID', group_keys=False)['Price']
.apply(lambda s: s.cummin().shift())
)

输出:

Stock_ID  Price       Date  Historical_low
0          1     45 2022-11-22            43.0
1          1     43 2022-11-21            46.0
2          1     46 2022-11-20            49.0
3          1     49 2022-11-19             NaN
4          2     81 2021-10-19            63.0
5          2     79 2021-10-13            63.0
6          2     63 2021-10-09            74.0
7          2     74 2021-10-07            77.0
8          2     77 2021-09-30             NaN
9          3     32 2022-03-16            30.0
10         3     39 2022-02-14            30.0
11         3     30 2022-02-01             NaN

最新更新