'Using Pandas to find section / window of least variance in time series
I have a time series dataframe of energy consumption.
How can I find the section or window of least variance? Let's say the size of the window is three, how can I get index 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 |
I can do this by iterating through the rows, but there is probably a better Pandas way of doing this, right?
Solution 1:[1]
Use Series.rolling with Rolling.var, then get index of minimal value by Series.idxmin and last get 3 indices by 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]
If there is default index:
out = df.index[idx - N+1:idx+1].tolist()
print (out)
[3, 4, 5]
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
