Encuentra la fecha más cercana a una fecha dada

Tengo una matriz de objetos de fecha y hora, y me gustaría encontrar qué elemento de la matriz es el más cercano a una fecha dada (por ejemplo, datetime.datetime(2014,12,16) )

Esta publicación muestra cómo encontrar la fecha más cercana que no sea anterior a la fecha dada . ¿Cómo puedo modificar este código para que pueda devolver las fechas anteriores a una fecha determinada?

Por ejemplo, si la matriz aloja elementos datetime.datetime(2014,12,10) y datetime.datetime(2014,12,28) , el primer elemento debe devolverse porque es el más cercano a datetime.datetime(2014,12,16) en valor absoluto.

Esta función devolverá la datetime y datetime en los items que sean los más cercanos al pivot fecha.

 def nearest(items, pivot): return min(items, key=lambda x: abs(x - pivot)) 

La parte buena de esta función funciona en tipos distintos de datetime demasiado fuera de la caja, si el tipo admite comparación, resta y abs , por ejemplo: números y tipos de vectores.

Como se responde en este enlace , la función ‘truncar’ está ahí para usted.

df.truncate(before='2012-01-07')

O puede usar get_loc con la opción ‘más cercana’.

 df.iloc[df.index.get_loc(datetime.datetime(2016,02,02),method='nearest')] 
 def nearestDate(base, dates): nearness = { abs(base.timestamp() - date.timestamp()) : date for date in dates } return nearness[min(nearness.keys())] 

Para encontrar una fecha más cercana y devolver el timedelta (diferencia entre dos fechas) hice lo siguiente:

 def nearest_date(items,pivot): nearest=min(items, key=lambda x: abs(x - pivot)) timedelta = abs(nearest - pivot) return nearest, timedelta 

Esto puede ser útil cuando tiene un umbral mínimo de proximidad para su aplicación como lo hice yo.

Mi solución para encontrar el índice más cercano en lugar del valor.

 def nearest_ind(items, pivot): time_diff = np.abs([date - pivot for date in items]) return time_diff.argmin(0)