Python 通过滚动计算找到一组小数字
我有一个数据帧,它有一个变量和一个等距的日期时间索引(索引的粒度为1秒)。假设总共有1000个样本:Python 通过滚动计算找到一组小数字,python,pandas,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 2
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
文档,看看是否有一个滚动计算可以帮上忙,但没有运气!谢谢。您只需在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()