查找给定日期的最近日期

时间:2015-08-26 22:39:48

标签: python date datetime

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

This帖子显示了如何找到最近的日期,它不在给定日期之前。如何更改此代码以便它可以返回给定日期之前的日期?

例如,如果数组包含元素datetime.datetime(2014,12,10)datetime.datetime(2014,12,28),则应返回前一项,因为它绝对值最接近datetime.datetime(2014,12,16)

6 个答案:

答案 0 :(得分:20)

正如在this link链接上所回答的那样,'truncate'功能适合你。

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

或者您可以将get_loc与“最近”选项一起使用。

df.iloc[df.index.get_loc(datetime.datetime(2016,02,02),method='nearest')]

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

要查找最近的日期返回timedelta(两个日期之间的差异),我执行了以下操作:

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

如果您的应用程序接近最低阈值,这可能很有用。

答案 3 :(得分:1)

我的解决方案是找到最接近的索引而不是值

ChildBar

答案 4 :(得分:1)

我知道这是一个旧答案,但我只是使用了 Tamas 发布的代码,发现它花费了相当长的时间 - 我对其进行了优化并看到了更快的性能;问题是迭代需要很长时间,这是我的新方法 - 只有当实际枢轴出现在列表中时它才会更快

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

希望这对遇到这个问题的人有所帮助。

答案 5 :(得分:0)

假设您要回答轻微的变化: “给一个带有日期时间索引的数据帧,我如何确定列s.replace(max,'',1)的最后一个值,其中“ last”定义为小于某个值s的最后一个索引

col