【问题标题】:calculate business days including custom holidays for two dates columns in python计算工作日,包括python中两个日期列的自定义假期
【发布时间】:2017-05-10 17:29:55
【问题描述】:

我试图通过添加一个新的 date_difference 列来获取两个日期列之间的工作日。

我尝试了什么?

bd = workday(ll.date_done,ll.order_date, cal)
bd = networkdays(ll.date_done,ll.order_date, cal)
km = np.busday_count(dd.date(), od.date(), holidays = cal)

我遇到了一个错误。

“系列”对象没有属性“天”

我想做什么。

# Table Name: ll
order_date  date_done
2017-04-09  2017-04-16
2017-04-09  2017-04-18
2017-04-10  2017-04-20

我的期望:

order_date  date_done      Date_Difference
2017-04-09  2017-04-16        4
2017-04-09  2017-04-18        7
2017-04-10  2017-04-20        6

我在做什么计算?

我有假期列表,不包括我试图获取两个日期的工作日差异。上面的 date_difference 计算只是虚拟数字。

【问题讨论】:

    标签: python pandas datetime business-logic


    【解决方案1】:

    如果你传递正确的类型,你可以使用numpy.bus_daycount()

    代码:

    df['date_diff'] = np.busday_count(
        df.order_date.values.astype('datetime64[D]'),
        df.date_done.values.astype('datetime64[D]'))
    

    测试代码:

    import pandas as pd
    import numpy as np
    
    from io import StringIO
    df = pd.read_fwf(StringIO(u"""
        order_date  date_done
        2017-04-09  2017-04-16
        2017-04-09  2017-04-18
        2017-04-10  2017-04-20"""), header=1)
    df.order_date = pd.to_datetime(df.order_date, infer_datetime_format=True)
    df.date_done = pd.to_datetime(df.date_done, infer_datetime_format=True)
    
    df['date_diff'] = np.busday_count(
        df.order_date.values.astype('datetime64[D]'),
        df.date_done.values.astype('datetime64[D]'))
    
    print(df)
    

    结果:

      order_date  date_done  date_diff
    0 2017-04-09 2017-04-16          5
    1 2017-04-09 2017-04-18          6
    2 2017-04-10 2017-04-20          8
    

    【讨论】:

    • 它适用于我,但我也有如下自定义假期列表:>>>​​ custom_holidays = holiday.HolidayBase() >>> custom_holidays.append(["2000-01-01", " 2014-01-01", "2014-01-20"]) >>> cal = Calendar(custom_holidays, ['Sunday', 'Saturday']) 在计算差异时我必须包括在内。错误:>>> up['date_diff'] = np.busday_count( up.order_date.values.astype('datetime64[D]'), up.date_done.values.astype('datetime64[D]'), 假期 = cal) 错误:无法将对象转换为 NumPy 日期时间
    • 而“cal”是日历对象。
    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 2017-09-14
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多