#python #pandas #datetime #time-series
#python #pandas #datetime #временные ряды
Вопрос:
У меня есть фрейм данных pandas с индексом datetime. Предположим, что индекс datetime начинается во время t1, есть ли в pandas способ возвращать строки фрейма данных для каждого, скажем, 15-минутного интервала времени, начиная со времени t1?
Кроме того, возможно ли усреднить все записи между этими 15-минутными интервалами и вернуть их?
Datetime Value
2018-10-08 00:00:01 100.70
2018-10-08 00:00:20 98.70
2018-10-08 00:00:34 112.60
2018-10-08 00:00:00 38.30
2018-10-08 00:01:02 60.30
2018-10-08 00:01:24 115.85
2018-10-08 00:02:00 76.10
В настоящее время я решаю эту проблему для интервалов продолжительностью в 1 час, создавая свои собственные time_intervals и используя between_time, но я чувствую, что должен быть гораздо более совершенный способ сделать это, используя индекс pandas datetime.
time_intervals=[("{}:00:00".format(i),"{}:00:00".format(i 1)) for i in range(23)]
means_list=[df.between_time(time_interval[0],time_interval[1]).mean()[0] for time_interval in time_intervals]
Комментарии:
1. Не могли бы вы предоставить образец из вашего фрейма данных? Для этой части «Далее, возможно ли усреднить все записи между этими 15-минутными интервалами и вернуть их?» — Вы можете использовать
df.resample('15m').mean()
. Что касается первого вопроса, я не знаю, обеспечивает лиdf.resample('15m').first()
ordf.resample('15m').last()
желаемое поведение.2. @J.Kwon Я добавил пример того, как выглядит временной ряд. Спасибо, позвольте мне посмотреть, что делают .first () и .last ().
3. Пожалуйста, также добавьте пример того, каким был бы желаемый результат.
4. @J.Kwon df.повторная выборка (’15 минут).mean(), похоже, работает. Не могли бы вы, пожалуйста, объяснить, каков предполагаемый результат .first () и .last ()? Предполагается ли, что он выдает первую или последнюю строку, которая случайно попадает в данную ячейку?
5. @J.Kwon кажется, что все это работает отлично, если вы отправите это в качестве ответа, я приму его, спасибо.
Ответ №1:
«У меня есть фрейм данных pandas с индексом datetime. Предположим, что индекс datetime начинается во время t1, есть ли в pandas способ возвращать строки фрейма данных для каждого, скажем, 15-минутного интервала времени, начиная со времени t1?»
Это лучше всего решить с помощью повторной выборки: если вы хотите получить первый элемент данного временного блока, используйте
df.resample('15m').first()
однако, если вы хотите получить последний элемент в заданном временном блоке, вам следует использовать
df.resample('15m').last()
«Кроме того, возможно ли усреднить все записи между этими
15-минутные интервалы и возвращать их?»
Да, также это можно сделать с помощью resample
:
df.resample('15m').mean()