Pandas df的日期范围。

时间:2017-04-28 09:08:24

标签: python python-2.7 date pandas dataframe

我在索引中有一些日期,而在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,但是这样我才能找到一个,而不是更高和更低,这就是我的行为......

谢谢!

1 个答案:

答案 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。

注意:为实现此目的,我已将索引列转换为普通列。