我有一个datetime对象数组,我想找到数组中哪个元素最接近给定日期(例如datetime.datetime(2014,12,16)
)
This帖子显示了如何找到最近的日期,它不在给定日期之前。如何更改此代码以便它可以返回给定日期之前的日期?
例如,如果数组包含元素datetime.datetime(2014,12,10)
和datetime.datetime(2014,12,28)
,则应返回前一项,因为它绝对值最接近datetime.datetime(2014,12,16)
。
答案 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