【问题标题】:Implementing Excel's NETWORKDAYS Logic using python to show business days (Weekdays)使用python实现Excel的NETWORKDAYS Logic来显示工作日(工作日)
【发布时间】:2020-09-26 05:34:15
【问题描述】:

我正在尝试使用 numpy.busday_count 方法在 python 中实现 excel networkdays 公式的逻辑。但我无法获得预期的输出。附件是excel的输出和代码

下面是代码。

import numpy as np
from datetime import date
start_date = date(2020, 3, 30)
end_date = date(2020, 1,1)
np.busday_count(start_date, end_date)

o/p: -63 预期输出:-64

请帮帮我。

【问题讨论】:

    标签: python excel pandas numpy datetime


    【解决方案1】:

    numpy 函数不包含 end_date 参数,而 excel 函数包含 end_date 参数。查看 5 月 5 日的行。 Excel 说 5/4 和 5/5 之间有两天,因为 excel 计算的是第 4 天和第 5 天。 Numpy 只计算第 4 个。这就是为什么你的答案永远只有 1 的原因。尝试在 python 中将 end_date 增加 +1 以获得相同的结果。

    np.busday_count(start_date, end_date + datetime.timedelta(days=1)
    

    不过,由于您的许多结束日期早于开始日期,这可能不适用于所有情况。你可能需要做这样的事情

    max_date = max(start_date, end_date) + datetime.timedelta(days=1)
    min_date = min(start_date, end_date)
    np.busyday_count(min_date, max_date) * np.sign(end_date - start_date)
    

    编辑 1:numpy 函数参数的顺序错误。我已经更正了。

    【讨论】:

    • 在使用以下行时出错 np.busday_count(min_date, max_date) * np.sign(end_date - start_date)
    • 你能分享一下错误是什么,以便我能更好地提供帮助吗?我确实在您的代码中看到了拼写错误。 busday应该是busyday。
    猜你喜欢
    • 2019-06-30
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多