我在索引中有一些日期,而在col2中有其他日期,我正在尝试找到一种方法,在col1中找到距离col2最近的2个“括号”日期。这是一个例子。
[In]Dates
[Out]
Index col2
2065-12-20 2062-12-20
2061-10-31 2049-11-19
2045-11-28 2020-09-08
2043-10-31 2053-11-19
2040-07-30 2038-06-06
2049-06-30 2019-05-12
2036-01-31 2040-11-21
现在我想要我的col 2上的每个日期,我索引中最接近的上级日期以及我的索引中最近的下级日期也是我col2的每个日期。
[In] Find Bracket
[Out]
Index col2 High bracket low bracket
2065-12-20 2062-12-20 2065-12-20 2061-10-31
2061-10-31 2049-11-19 2061-10-31 2045-11-28
2045-11-28 2020-09-08 2020-09-08 2020-09-08
2043-10-31 2053-11-19 2061-10-31 2049-06-30
2040-07-30 2038-06-06 2040-07-30 2036-01-31
2049-06-30 2019-05-12 2036-01-31 2019-05-12
2036-01-31 2040-11-21 2043-10-31 2040-07-30
例如,代表第一行。 2065-12-20是2062-12-20(col2)指数中最接近的较高日期,指数中最接近的较低日期为2061-10-31等...
我对此很感兴趣......我明白我需要使用argmin()并减去index和col2,但是这样我才能找到一个,而不是更高和更低,这就是我的行为......
谢谢!
答案 0 :(得分:1)
def find_closest(x, index_col):
min_diff = x - index_col.max()
last_val = index_col.max()
for val in list(index_col):
current_diff = x - val
if current_diff.days > min_diff.days and current_diff.days <= 0:
min_diff = current_diff
last_val = val
return last_val
在col2上应用此功能以找到高支架,类似地,您可以为low_bracket执行此操作。
从我的理解角度来看,你在high_bracket的2020-09-08的预期输出应该是2036-01-31。
注意:为实现此目的,我已将索引列转换为普通列。