Python在序列中找到X之前的最后日期
我想在一系列日期中找到一个特定的日期。如果找不到,我希望能找到一个比这个日期更早的最近日期。这就像Excel里的MATCH函数,你可以选择设置MATCH_TYPE为0(精确匹配)、-1(小于)和1(大于)。
不过我在Python中没有找到一个简单的对应方法。
有没有人能给我一些建议呢?
提前谢谢大家!
我根据下面的帮助找到了自己的解决方案:
def matchLE(to_match,sorted_match_series):
match_series[~(to_match < match_series)].argmax()
2 个回答
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)
1
这个代码会返回离你给定日期最近的日期,不管是比它早还是晚:
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)
正如你所看到的,这个函数是通用的。你可以给它输入日期、数字或者任何其他可以排序的数据。