python-3.x - 从两个日期时间值 - 将给定的日期时间值分配给最近/最左边的日期时间值
问题描述
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:09
的13: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 论坛获得)。
我尝试了所有可能的方法来纠正此代码以适合我的结果。但是,没有结果。
像这样的问题:找到数组之间最接近的值 - 不符合我的目的。
有什么建议么。
谢谢你
解决方案
好吧,您必须处理您的值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