首页 > 解决方案 > 通过移动 n 个数据点来查找最小值

问题描述

我有以下数据框:

num
Out[89]: 
Date
2015-07-06    33
2015-07-07    20
2015-07-08     4
2015-07-09     3
2015-07-10     8
              ..
2020-06-29    14
2020-06-30    13
2020-07-01    18
2020-07-02    20
2020-07-03    28
Length: 1228, dtype: int64

我想num.lt(5)每天都在轮班的基础上应用一些东西n。例如,如果它能够找到 5,但是在出现 4 和 3 的较低值之后的第二天,那么在间隔 3 天的时间间隔内,它会记录值 3。所以基本上应该发生的事情是小于 5,但是最低值在接下来的 3 天内最低。我怎样才能做到这一点?

例如 :

 Date
    2015-07-06    33
    2015-07-07    20
    2015-07-08     4
    2015-07-09     3
    2015-07-10     8

在日期2015-07-08,它的值为 4,如果我使用它是正确的,lt(5)但在它有 3 的第二天。我希望它记录 3 而不是 4 和 3,因为 3 是最低值。它应该每隔 3 天检查一次。因此,如果它开始检查条件,2015-07-08它应该检查接下来 3 天的最低值,即 until 2015-07-11。你能建议这样做吗?

编辑:

在此处输入图像描述 因此,无论哪里lt(5)是真的,都将是起点,接下来的 3 天是需要找到最低值的地方。搜索应该只在下一个起点的间隔结束时开始lt(5)

标签: pythonpython-3.xpandas

解决方案


我的猜测是你需要索引。一旦你得到了这些,你就可以随心所欲地操纵数据。

df  = pd.DataFrame(data = {
    "data":[3, 2, 77, 655, 4, 5, 444, 5, 444, 5, 456, 456, 45, 34, 34, 88]
})

a = 0
increment = 3
b = increment
l = []
while b<df.shape[0]:
    a = df.iloc[a:b, 0].idxmin() + 1
    
    l.append(a)
    b = a + increment 


print(l)

[2, 5, 6, 8, 10, 13]  #for increment =3

推荐阅读