Найдите ближайшую дату к данной дате

У меня есть массив объектов 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

Это может быть полезно, когда у вас есть минимальный порог близости для вашего приложения, как я.