#python #pandas #period #pandas-resample
#питон #панды #период #панды-повторный пример
Вопрос:
У меня есть временной ряд с разрешением 5 минут. Записи представляют количество энергии, использованной за предыдущие 5 минут. Т. е. запись для 00:25 показывает потребление энергии от 00:20:01-00:25:00.
import pandas as pd idx = pd.date_range(start='2021-11-30 00:00', end='2021-11-30 1:00', freq='5T') ser = pd.Series(index=idx, data=range(len(idx)))
Мне нужно пересчитать данные с интервалом в 15 минут. Я могу сделать это с помощью
ser.resample('15T', closed='right', label='right').sum()
что дает:
2021-11-30 00:00:00 0 2021-11-30 00:15:00 6 2021-11-30 00:30:00 15 2021-11-30 00:45:00 24 2021-11-30 01:00:00 33 Freq: 15T, dtype: int64
Именно то, чего я хочу. Размышляя над своим кодом, я подумал, что мой индекс должен состоять не из временных меток, а из периодов. Так я и сделал:
ser_period = ser.copy() ser_period.index = ser_period.index.to_period(freq='5T')
Насколько я вижу, ничего существенного не изменилось. Но если я это сделаю
ser_period.resample('15T', closed='right', label='right').sum()
Я получаю
2021-11-29 23:45 3 2021-11-30 00:00 12 2021-11-30 00:15 21 2021-11-30 00:30 30 2021-11-30 00:45 12 2021-11-30 01:00 0 Freq: 15T, dtype: int64
Я повозился с аргументами, но исправить это не удалось. И я не понимаю, почему это происходит. Конечно, я могу придерживаться индекса даты и времени, но я все равно в замешательстве. Почему повторная выборка приводит к другому результату? И был ли я неправ в преобразовании индекса? Разве промежуток времени в 5 минут не является разумным периодом?»