使用 Pandas 找到时间序列中方差最小的部分 / window

Using Pandas to find section / window of least variance in time series

我有一个能源消耗的时间序列数据框。

如何找到方差最小的部分或 window?假设 window 的大小是三,我怎样才能得到索引 3、4、5?

index time energy
0 2021-04-21 16:00:00 14
1 2021-04-21 17:00:00 87
2 2021-04-21 18:00:00 3
3 2021-04-21 19:00:00 349
4 2021-04-21 20:00:00 355
5 2021-04-21 21:00:00 350
6 2021-04-21 22:00:00 21

我可以通过遍历行来做到这一点,但可能有更好的 Pandas 方法,对吗?

使用 Series.rolling with Rolling.var, then get index of minimal value by Series.idxmin 最后得到 3 个索引 indexing:

N = 3
idx = df['energy'].rolling(N).var().idxmin()

pos = df.index.get_loc(idx) + 1
out = df.index[pos - N:pos].tolist()
print (out)
[3, 4, 5]

如果有默认索引:

out = df.index[idx - N+1:idx+1].tolist()
print (out)
[3, 4, 5]