我已经提取了一年中超过1300种证券的安全智慧价格细节。看起来像这样。
它包含以下列-一个数据框中所有证券的日期符号Close,持续约200个交易日
我想知道证券的最后价格是否是不同时间范围内的最高价格-7天,25天,100天等等,所有这1300种证券。因此,假设今天的收盘价可能是过去7天的最大值,而不是25天。然后我需要在7天列真和假在25天列。
我不能弄清楚上面的循环。
发布于 2021-04-11 13:59:45
我不确定您的整个数据结构是什么样子,但对于单个安全性,您可以使用rolling()
df = pd.DataFrame({'Close': [10,13,21,12,16,13,17,20,18,15,22,20]},
index = [pd.Timestamp('20210301'),
pd.Timestamp('20210302'),
pd.Timestamp('20210303'),
pd.Timestamp('20210304'),
pd.Timestamp('20210305'),
pd.Timestamp('20210308'),
pd.Timestamp('20210309'),
pd.Timestamp('20210310'),
pd.Timestamp('20210311'),
pd.Timestamp('20210312'),
pd.Timestamp('20210315'),
pd.Timestamp('20210316') ])df:
Close
2021-03-01 10
2021-03-02 13
2021-03-03 21
2021-03-04 12
2021-03-05 16
2021-03-08 13
2021-03-09 17
2021-03-10 20
2021-03-11 18
2021-03-12 15
2021-03-15 22
2021-03-16 20使用滚动,您可以获得最后n个值中的max():
df['Close'].rolling(4).max()
2021-03-01 NaN
2021-03-02 NaN
2021-03-03 NaN
2021-03-04 21.0
2021-03-05 21.0
2021-03-08 21.0
2021-03-09 17.0
2021-03-10 20.0
2021-03-11 20.0
2021-03-12 20.0
2021-03-15 22.0
2021-03-16 22.0这样你就可以得到你想要的True/False条目(我使用2,4和6个窗口大小来说明-你需要调整到7,25,100,等等):
df['max2'] = df['Close'] == df['Close'].rolling(2).max()
df['max4'] = df['Close'] == df['Close'].rolling(4).max()
df['max6'] = df['Close'] == df['Close'].rolling(6).max()df:
Close max2 max4 max6
2021-03-01 10 False False False
2021-03-02 13 True False False
2021-03-03 21 True False False
2021-03-04 12 False False False
2021-03-05 16 True False False
2021-03-08 13 False False False
2021-03-09 17 True True False
2021-03-10 20 True True False
2021-03-11 18 False False False
2021-03-12 15 False False False
2021-03-15 22 True True True
2021-03-16 20 False False False重要的是要注意,例如,在这种情况下,rolling(6)需要6个先前的值才能工作。如果6个都不存在,则返回NaN。换句话说,在有6个值可供查看之前,您将得到False。虽然这可以使用min_periods参数进行配置。
https://stackoverflow.com/questions/67041100
复制相似问题