Pandas df 中的日期范围。

Posted

技术标签:

【中文标题】Pandas df 中的日期范围。【英文标题】:Range of Dates in Pandas df. 【发布时间】:2017-09-26 08:14:51 【问题描述】:

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

谢谢!

【问题讨论】:

如果你发布你尝试过的小代码最好:) 这正是我理解我需要做的,它是我代码的最后一部分。我获得了索引和 col2。我现在不使用 argmin,因为我知道它是一个死胡同……我无法弄清楚到底该使用什么…… 也许这可以帮助你:***.com/questions/30112202/… 【参考方案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。

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

【讨论】:

以上是关于Pandas df 中的日期范围。的主要内容,如果未能解决你的问题,请参考以下文章

遍历 Pandas Dataframe 中定义的日期时间索引范围

规范化 pandas 中的数据

在多个条件下合并来自多个数据帧的数据

如何按日期合并 DF,仅使用日期和月份,使用指定的日期范围

时间序列--日期的范围频率及移动

在pandas df中,对列的值在范围内的行进行分组。