首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找数据库中不同项在特定日期内的最大值

查找数据库中不同项在特定日期内的最大值
EN

Stack Overflow用户
提问于 2021-04-11 11:08:43
回答 1查看 34关注 0票数 0

我已经提取了一年中超过1300种证券的安全智慧价格细节。看起来像这样。

它包含以下列-一个数据框中所有证券的日期符号Close,持续约200个交易日

我想知道证券的最后价格是否是不同时间范围内的最高价格-7天,25天,100天等等,所有这1300种证券。因此,假设今天的收盘价可能是过去7天的最大值,而不是25天。然后我需要在7天列真和假在25天列。

我不能弄清楚上面的循环。

EN

回答 1

Stack Overflow用户

发布于 2021-04-11 13:59:45

我不确定您的整个数据结构是什么样子,但对于单个安全性,您可以使用rolling()

代码语言:javascript
复制
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:

代码语言:javascript
复制
            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()

代码语言:javascript
复制
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,等等):

代码语言:javascript
复制
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:

代码语言:javascript
复制
            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参数进行配置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67041100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档