Pandas - 如何根据自定义日历计算两个日期之间的天数[关闭]

Posted

技术标签:

【中文标题】Pandas - 如何根据自定义日历计算两个日期之间的天数[关闭]【英文标题】:Pandas - How to count days b/w two dates according to custom calendar [closed] 【发布时间】:2020-12-02 16:29:52 【问题描述】:

我的问题很简单,所以我希望有一个简单的解决方案。我想计算两个日期之间的天数,而不是使用完整的日历日或工作日或带有假日日历的工作日,我想以日期列表的形式提供我自己的“日历”。

假设我的日期是 ['2019-01-01'、'2010-01-03'、'2019-01-04'、'2019-01-10']。我希望“2019-01-01”和“2019-01-03”之间的日期返回 1。“2019-01-03”和“2019-01-10”之间的日期应该返回 2。

谢谢!

# This produces standard calendar days between-
dates_list = df.index
x = dates_list[1] - dates_list[0]

# This produces days according to numpy businessdaycal:
cal = np.busdaycalendar()
x = np.busday_count('2019-01-01', '2019-01-03', busdaycal=cal)

# This works, but requires multiple steps so prob inefficient:
dates_list = df.index
all_dates = pd.date_range(dates_list[0], dates_list[1])
holidays = [d.date() for d in all_dates if d not in dates_list]
cal = np.busdaycalendar(holidays=holidays)
x = np.busday_count('2019-01-01', '2019-01-03', busdaycal=cal)

【问题讨论】:

有什么问题,到目前为止你尝试了什么?你被困在哪里了? 我们还需要您定义您拥有的关系。你如何“通知”你的程序如何确定天数?您给出了两个薄示例,而不是规范。返回值取决于什么?您所说的只是您想提供自己的定义,但您并没有告诉我们该定义可能是量化的还是参数化的。没有“读懂我的想法”算法......就像我们尝试的那样...... :-) 抱歉,到目前为止,我的尝试并没有接近实际的技巧,但我发布了一些“错误”的示例”。我想做上面的 numpy 示例所做的事情,而不是使用 numpy 的工作日日历,我想提供 MY OWN 日历(将由明确的日期列表创建)。然后它应该与 np.busday_count 函数做同样的事情。谢谢@Prune! 你卡在哪里了?这似乎是一个微不足道的单符号更改:当您调用 count 函数时,将内置的 numpy 日历替换为您自己的。 你试过series.between().sum() 吗?其中series 包含您的自定义日历 【参考方案1】:

这是我所拥有的最好的。我尝试了@RichieV 的 pd.Series.between() 和以下方法,速度更快:

dates_list = df.index
all_dates = pd.date_range(dates_list[0], dates_list[1])
holidays = [d.date() for d in all_dates if d not in dates_list]
cal = np.busdaycalendar(holidays=holidays)
x = np.busday_count('2019-01-01', '2019-01-03', busdaycal=cal)

【讨论】:

【参考方案2】:

这是一种方法:

import pandas as pd

my_cal = pd.Series(
    data=1, 
    index=pd.date_range(start='2020-01-01', periods=100, freq='D'))

# set your own 'holidays' to zero here

# cumulative sum won't count your custom 'holidays'
my_cal = my_cal.cumsum()

# use like this (this could be wrapped in a function)
days_between = my_cal['2020-01-03'] - my_cal['2020-01-01']
print(days_between)

【讨论】:

以上是关于Pandas - 如何根据自定义日历计算两个日期之间的天数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 将自定义日期(月年)循环到(月年+N)以进行绘图

自定义水平滚动日历

带有 ACF 日期字段的 WordPress 自定义帖子类型日历

从日期计算中排除周末和自定义日期(即假期)

在Python中动态计算不包括假期日历的工作日数

如何使用不同日期自定义周末日期,并在完整日历中使用不同的小时数