我正试图在日期系列中找到一个日期,如果我找不到那个日期,我宁愿采用比这个日期更早的最新日期,这就是Excel中MATCH函数的想法可以选择将MATCH_TYPE设置为0(精确), - 1(小于)和1(大于)。
但我没有在Python中找到一种等效且简单的方法。
有人可以对此有所了解吗?
我根据以下帮助者找到了我自己的解决方案:
def matchLE(to_match,sorted_match_series):
match_series[~(to_match < match_series)].argmax()
答案 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)