通过滚动计算找到一组小数字

2024-05-14 16:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,它有一个变量和一个等距的日期时间索引(索引的粒度为1秒)。假设总共有1000个样本:

dates = pd.date_range('2015-1-1', periods=(1000) ,freq='S')
df = pd.DataFrame(np.random.rand(1000),index=dates, columns=['X'])

                    X
2015-01-01 00:00:00 2.2
2015-01-01 00:00:01 2.5
2015-01-01 00:00:02 1.2
2015-01-01 00:00:03 1.5
2015-01-01 00:00:04 3.7
2015-01-01 00:00:05 3.1

etc

我想确定滚动窗口(给定长度)的开始,该窗口包含给定窗口大小内包含最小值数字的最大集合。你知道吗

所以在上面的例子中,如果窗口的大小是2,答案是:

start_index =  2015-01-01 00:00:02
end_index   =  2015-01-01 00:00:03

我试着阅读pandas文档,看看是否有一个滚动计算可以提供帮助,但没有运气!谢谢。你知道吗


Tags: 数据dataframedfdateindexnp粒度时间
1条回答
网友
1楼 · 发布于 2024-05-14 16:25:12

你只需要在df['X'] == df['X'].min()上做rolling_sum。那么窗口的结尾就是:

>>> ts = df['X'] == df['X'].min()
>>> pd.rolling_sum(ts, win_size).argmax()

为了获得窗口的开始位置,您可以移动窗口的结束位置,也可以移动序列:

>>> pd.rolling_sum(ts.shift(-win_size), win_size).argmax()

相关问题 更多 >

    热门问题