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 中的日期范围。的主要内容,如果未能解决你的问题,请参考以下文章