我正在尝试在日期列表中找到与当前日期最接近的过去日期。我已经找到了几个在列表中搜索最接近日期的示例,但是所有这些示例都允许返回另一个日期。
日期时间列表具有以下形式:
datelist =
[datetime.datetime(2019, 12, 31, 0, 0),
datetime.datetime(2020, 1, 10, 0, 0),
datetime.datetime(2020, 1, 20, 0, 0),
datetime.datetime(2020, 1, 31, 0, 0),
datetime.datetime(2020, 2, 10, 0, 0),
datetime.datetime(2020, 2, 20, 0, 0)]
到目前为止,我一直在实现以下功能以查找最接近的日期;
def nearest_ind(items, pivot):
'''
Find the nearest value to the given value (the pivot) in a list.
'''
time_diff = np.abs([date - pivot for date in items])
return time_diff.argmin(0)
但这会将最接近的日期返回到当前日期,是返回将来最接近的日期的一半时间。我也一直在考虑实现numpy searchsorted函数,但这似乎总是返回最接近的将来日期,而不管我是通过以下方式为side参数选择“ right”还是“ left”:
np.searchsorted(datelist, datetime.datetime.now(), side='right')
np.searchsorted(datelist, datetime.datetime.now(), side='left')
numpy searchsorted函数在任何一个实例中均返回(如果我今天要在2020年2月7日运行该函数)4(对应于datetime.datetime(2020,2,10,0,0))。有谁知道一种确保始终返回过去最接近日期的方法?
min
与2一起使用key
将是一种方式:
from datetime import datetime
now = datetime.now()
min(datelist, key=lambda x: (x>now, abs(x-now)) )
输出:
datetime.datetime(2020, 1, 31, 0, 0)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句