使用 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]
我有一个能源消耗的时间序列数据框。
如何找到方差最小的部分或 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]