Найдите ближайшую дату к данной дате
У меня есть массив объектов datetime, и я хотел бы найти, какой элемент в массиве находится ближе всего к данной дате (например, datetime.datetime(2014,12,16)
)
В этом сообщении показано, как найти ближайшую дату, которая не была до указанной даты. Как я могу изменить этот код, чтобы он мог возвращать даты, которые были до заданной даты?
Например, если в массиве размещены элементы datetime.datetime(2014,12,10)
и datetime.datetime(2014,12,28)
, прежний элемент должен быть возвращен, поскольку он является самым близким к datetime.datetime(2014,12,16)
по абсолютной величине.
Ответы
Ответ 1
Эта функция вернет datetime
в items
, которая ближе всего к дате pivot
.
def nearest(items, pivot):
return min(items, key=lambda x: abs(x - pivot))
Хорошая часть, эта функция работает на других типах, чем datetime
тоже из коробки, если тип поддерживает сравнение, вычитание и abs
, например: номера и векторные типы.
Ответ 2
Как указано на этой ссылке, функция "truncate" существует для вас.
df.truncate(before='2012-01-07')
Или вы можете использовать get_loc с параметром "ближайший".
df.iloc[df.index.get_loc(datetime.datetime(2016,02,02),method='nearest')]
Ответ 3
def nearestDate(base, dates):
nearness = { abs(base.timestamp() - date.timestamp()) : date for date in dates }
return nearness[min(nearness.keys())]
Ответ 4
Чтобы найти ближайшую дату и вернуть timedelta (разница между двумя датами), я сделал следующее:
def nearest_date(items,pivot):
nearest=min(items, key=lambda x: abs(x - pivot))
timedelta = abs(nearest - pivot)
return nearest, timedelta
Это может быть полезно, когда у вас есть минимальный порог близости для вашего приложения, как я.