Панды: округление индекса времени до ближайшей 5-й минуты

У меня есть df с обычными временными метками в качестве индекса:

  2011-04-01 09:30:00 2011-04-01 09:30:10 ... 2011-04-01 09:36:20 ... 2011-04-01 09:37:30 

Как создать столбец для этого фреймворка с той же меткой времени, но округленный до ближайшего 5-минутного интервала? Как это:

  index new_col 2011-04-01 09:30:00 2011-04-01 09:35:00 2011-04-01 09:30:10 2011-04-01 09:35:00 2011-04-01 09:36:20 2011-04-01 09:40:00 2011-04-01 09:37:30 2011-04-01 09:40:00 

3 Solutions collect form web for “Панды: округление индекса времени до ближайшей 5-й минуты”

Решение round_to_5min(t) использующее арифметику timedelta является правильным, но сложным и очень медленным. Вместо этого используйте красивую Timstamp в Timstamp :

 import numpy as np import pandas as pd ns5min=5*60*1000000000 # 5 minutes in nanoseconds pd.to_datetime(((df.index.astype(np.int64) // ns5min + 1 ) * ns5min)) 

Давайте сравним скорость:

 rng = pd.date_range('1/1/2014', '1/2/2014', freq='S') print len(rng) # 86401 # ipython %timeit %timeit pd.to_datetime(((rng.astype(np.int64) // ns5min + 1 ) * ns5min)) # 1000 loops, best of 3: 1.01 ms per loop %timeit rng.map(round_to_5min) # 1 loops, best of 3: 1.03 s per loop 

Примерно в 1000 раз быстрее!

Вы можете попробовать что-то вроде этого:

 def round_to_5min(t): delta = datetime.timedelta(minutes=t.minute%5, seconds=t.second, microseconds=t.microsecond) t -= delta if delta > datetime.timedelta(0): t += datetime.timedelta(minutes=5) return t df['new_col'] = df.index.map(round_to_5min) 

У меня была та же проблема, но с datetime64p [ns] timestamps.

Я использовал:

 def round_to_5min(t): """ This function rounds a timedelta timestamp to the nearest 5-min mark""" t = datetime.datetime(t.year, t.month, t.day, t.hour, t.minute - t.minute%5, 0) return t 

а затем функция «карта»

  • Pandas Dataframe или Panel to 3d numpy array
  • Создание панд Dataframe и изменение переименования 0.10.0 до 0.13.1
  • Быстрое чтение указанных столбцов в df с помощью pandas.to_hdf
  • Функция вставить только положительные значения в результаты Dataframe Pandas в отрицательных значениях
  • Строка графика Trendline не работает с bigdataset
  • Почему pandas.to_datetime медленный для нестандартного формата времени, такого как '2014/12/31'
  • Создание ежемесячных временных рядов с произвольными датами начала
  • Извлечь первую дату из строки в кадре данных
  • Reindexing pandas timeseries от объекта dtype до datetime dtype
  • Метод pandas.DataFrame corrwith ()
  • Добавление фреймов данных pandas, сгенерированных в цикле for
  • Python - лучший язык программирования в мире.