gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:08:27 27 4
gpt4 key购买 nike

我想计算两个日期之间的工作日数,并用这些日子创建一个新的 pandas 数据框列。我还有一个假期日历,我想在计算时排除假期日历中的日期。

我环顾四周,发现 numpy busday_count 函数是一个有用的工具。该函数计算两个日期之间的工作日数,还允许您包含假日日历。

我还环顾四周,看到了假期套餐,它为我提供了不同国家/地区的假期日期。我认为将这个假期日历添加到 numpy 函数中会很棒。

然后我进行了如下处理;

import pandas as pd
import numpy as np
import holidays
from datetime import datetime, timedelta, date

df = {'start' : ['2019-01-02', '2019-02-01'],
'end' : ['2020-01-04', '2020-03-05']
}
df = pd.DataFrame(df)

holidays_country = holidays.CountryHoliday('UnitedKingdom')
start_date = [d.date for d in df['start']]
end_date = [d.date for d in df['end']]
holidays_numpy = holidays_country[start_date:end_date]

df['business_days'] = np.busday_count(begindates = start_date,
enddates = end_date,
holidays=holidays_numpy)

当我运行这段代码时,它会抛出这个错误 TypeError: Cannot convert type '<class 'list'>' to date

当我进一步查看时,我注意到 start_date 和 end_date 是列表,这可能是错误发生的原因。

然后我更改了 holidays_numpy变量为 holidays_numpy = holidays_country['2019-01-01':'2019-12-31']它奏效了。

但是,由于我的数据框中每一行的日期都不同,有没有办法在我的 holiday_numpy 中设置两个参数?变量来从 start_date 和 end_date 中选择相应的值(就像 zip 函数一样)?

我也对解决这个问题的其他方法持开放态度。

最佳答案

这应该有效:

import pandas as pd
import numpy as np
import holidays

df = {'start' : ['2019-01-02', '2019-02-01'],
'end' : ['2020-01-04', '2020-03-05']}
df = pd.DataFrame(df)

holidays_country = holidays.CountryHoliday('UK')

def f(x):
return np.busday_count(x[0],x[1],holidays=holidays_country[x[0]:x[1]])

df['business_days'] = df[['start','end']].apply(f,axis=1)

df.head()

关于python - 动态计算工作日数,不包括 Python 中的假期日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61877437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com