Python在系列之前找到X之前的最后日期

时间:2014-03-12 06:32:17

标签: python datetime match

我正试图在日期系列中找到一个日期,如果我找不到那个日期,我宁愿采用比这个日期更早的最新日期,这就是Excel中MATCH函数的想法可以选择将MATCH_TYPE设置为0(精确), - 1(小于)和1(大于)。

但我没有在Python中找到一种等效且简单的方法。

有人可以对此有所了解吗?

提前致谢!

我根据以下帮助者找到了我自己的解决方案:

def matchLE(to_match,sorted_match_series):
    match_series[~(to_match < match_series)].argmax()

2 个答案:

答案 0 :(得分:0)

返回最近的日期(更高或更低):

from datetime import datetime as dt

def find_closest(mydate, dates):
   return min(dates, key=lambda x:abs(x-mydate))

dates = [dt(2014, 1, 1), dt(2014, 1, 10), dt(2014, 1, 18), dt(2014, 1, 31)]

print find_closest(dt(2014, 1, 7), dates)
print find_closest(dt(2014, 1, 15), dates)
print find_closest(dt(2014, 1, 25), dates)

关于Misha评论的编辑:

要获得最接近的早期日期,只需修改find_closest功能:

def find_closest(mydate, dates):
   # see: http://stackoverflow.com/a/5348215/1407427
   z = lambda seq,x: min([(x-i,i) for i in seq if x>=i] or [(0,None)])[1]
   return z(dates, mydate)

如您所见,这是一般功能。您可以使用日期,数字或任何其他可订购数据来提供它。

答案 1 :(得分:0)

你可以用几行Python来做到这一点。我就是这样做的:

earlier_dates = [d for d in array_of_dates if d <= target_date]
if not earlier_dates:
    raise ValueError("no earlier dates to choose from")
return max(earlier_dates)