У меня есть временной ряд данных о потреблении энергии.
Как я могу найти раздел или окно с наименьшим отклонением? Допустим, размер окна равен трем, как мне получить индекс 3,4,5?
показатель | время | энергия |
---|---|---|
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
с Rolling.var
, затем получите индекс минимального значения с помощью 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]