首页 > 解决方案 > 从两个日期时间值 - 将给定的日期时间值分配给最近/最左边的日期时间值

问题描述

array = (['2017 SEP 9 06:13:50', '2017 SEP 9 10:39:54', '2017 SEP 9 15:05:58', '2017 SEP 9 19:31:59', '2017 SEP 9 23:58:04', '2017 SEP 10 04:24:07', '2017 SEP 10 08:50:09', '2017 SEP 10 13:16:12','2017 SEP 10 17:42:16'], dtype=object) and each elemnt associated with the index value.
target1 = 2017 SEP 10 10:15:27
target2 = 2017 SEP 10 10:20:22, ...

'target1'为, ,...找到最接近的值'target2'是给我'2017 SEP 10 13:16:12'和相关的'index'值。但是,我需要分配'target1,2...n'具有相同索引值的值'2017 SEP 10 08:50:09',直到它达到下一个值(2017 SEP 10 13:16:12)

例子:

a= '2017 SEP 10 08:50:09' b='2017 SEP 10 13:16:12'

target='2017 SEP 10 12:10:15'并且它接近于 b。但是,我需要在应该给出(索引值)之间 08:50:0913:16:12任何08:50:09值。如果13:16:13它应该开始给出 b 索引值。

我试过代码,

def find_nearest(array, value):
    array = np.asarray(array)
    idx = (np.abs(array - value)).argmin()
    return array[idx]

归功于作者(我从 Stack Overflow 论坛获得)。

我尝试了所有可能的方法来纠正此代码以适合我的结果。但是,没有结果。

像这样的问题:找到数组之间最接近的值 - 不符合我的目的。

有什么建议么。

谢谢你

标签: python-3.x

解决方案


好吧,您必须处理您的值datetime以允许比较。您可以使用dateparser库轻松地做到这一点:

import dateparser

array = ['2017 SEP 9 06:13:50', '2017 SEP 9 10:39:54', '2017 SEP 9 15:05:58', '2017 SEP 9 19:31:59', '2017 SEP 9 23:58:04', '2017 SEP 10 04:24:07', '2017 SEP 10 08:50:09', '2017 SEP 10 13:16:12','2017 SEP 10 17:42:16']
target1 = "2017 SEP 10 10:15:27"
target2 = "2017 SEP 10 10:20:22"
def find_closest_date(target,array):
    #convert the target value in datetime
    target = dateparser.parse(target)
    #convert the array in an array of datetimes
    array_dt = [dateparser.parse(x) for x in array]
    #calculate time differences between target and values in list
    deltas = [np.abs(target-x) for x in array_dt]
    #grab the index of the minimum delta
    index_of_closest = deltas.index(min(deltas))

    return array[index_of_closest]

print(target1, '- closest value in list :',find_closest_date(target1,array))
print(target2, '- closest value in list :',find_closest_date(target2,array))

输出

2017 SEP 10 10:15:27 - closest value in list : 2017 SEP 10 08:50:09
2017 SEP 10 10:20:22 - closest value in list : 2017 SEP 10 08:50:09

推荐阅读