查找给定日期的最近日期

use*_*497 34 python datetime date

我有一个datetime对象数组,我想找到数组中哪个元素最接近给定日期(例如datetime.datetime(2014,12,16))

这篇文章展示了如何找到不在给定日期之前的最近日期.如何更改此代码以便它可以返回给定日期之前的日期?

例如,如果阵列封装元素datetime.datetime(2014,12,10)和datetime.datetime(2014,12,28),前一个项目应返回,因为它最接近datetime.datetime(2014,12,16)的绝对值.

Tam*_*dus 76

该函数将返回datetime在items其最接近的日期pivot.

def nearest(items, pivot):
    return min(items, key=lambda x: abs(x - pivot))
Run Code Online (Sandbox Code Playgroud)

datetime如果类型支持比较,减法以及abs例如:数字和向量类型,则此函数可以在除开箱即用之外的类型上工作.

  • 此代码不会返回给定日期*之前*最接近的日期。 (4认同)
  • 它的简洁性是最好的.大. (3认同)
  • `min(如果item> pivot,则为项目中的项目项目) (3认同)
  • 这将返回一个日期。lambda 获取日期之间的绝对差,然后 min 返回绝对差最小的日期。 (3认同)
  • 您无法解释您的答案“这也将适用于数字”是没有解释。什么是“项目”什么是“枢轴” (2认同)

Kev*_*Zhu 23

正如在此链接链接上所回答的那样,'truncate'功能适合您.

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

或者您可以将get_loc与'nearest'选项一起使用.

df.iloc[df.index.get_loc(datetime.datetime(2016,02,02),method='nearest')]
Run Code Online (Sandbox Code Playgroud)

  • 我认为使用“backfill”而不是“nearest”更直接。因为它从字面上告诉您,如果没有完全匹配,它将选择 NEXT 索引。 (3认同)

Chi*_*iel 9

此代码返回给定日期之前最近的日期:

def nearest(items, pivot):
    return min([i for i in items if i <= pivot], key=lambda x: abs(x - pivot))
Run Code Online (Sandbox Code Playgroud)


小智 6

My solution to find the closest index instead of the value

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