pandas滚动计算找到一组小数字

时间:2015-10-10 14:11:23

标签: python pandas

我有一个数据框,它有一个变量和一个等间隔的日期时间索引(索引的粒度为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文档,看看是否有滚动计算可以提供帮助,但没有运气!感谢。

1 个答案:

答案 0 :(得分:1)

您需要rolling_sum超过df['X'] == df['X'].min()。那么窗口的结尾就是:

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

并且为了获得窗口的开始,您可以移动窗口的末尾或者移动系列:

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