gpt4 book ai didi

python - 如何补偿假期 - pandas

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

假设我有一个数据框,如下所示:

df = pd.DataFrame({'Ending Date': [Timestamp('2019-12-08 00:00:00'), Timestamp('2019-12-08 00:00:00')], 'FName': ['Jon', 'Bob'], 'LName': ['Doe', 'Smith'], 'Starting Date': ['2019-09-29', '2019-09-29']})
<小时/>
  Ending Date FName  LName Starting Date
0 2019-12-07 Jon Doe 2019-09-28
1 2019-12-07 Bob Smith 2019-09-28

如您所见,“结束日期”列始终比“开始日期”早 10 周,但是,我有一个假期列表:

holidays = pd.Series([Timestamp('2019-09-14 00:00:00'), Timestamp('2019-10-05 00:00:00'), Timestamp('2019-10-12 00:00:00'), Timestamp('2019-10-26 00:00:00'), Timestamp('2019-12-21 00:00:00'), Timestamp('2019-12-28 00:00:00'), Timestamp('2020-01-04 00:00:00'), Timestamp('2020-01-25 00:00:00'), Timestamp('2020-02-01 00:00:00'), Timestamp('2020-02-29 00:00:00'), Timestamp('2020-04-04 00:00:00'), Timestamp('2020-05-02 00:00:00')])

因此,我想“补偿”假期,所以我想获取要计数的假期系列中开始日期和结束日期之间的每个星期六,并添加 n(计数)周到结束日期,并且,如果添加的任何一周是假期,也要对它们进行补偿,依此类推...

我尝试过:

df['Ending Date'] = df['Ending Date'] + pd.Timedelta(weeks=10 + pd.date_range(df['Starting Date'], df['Ending Date']).isin(holidays).sum())

但是错误为:

TypeError: Cannot convert input [0    2019-09-28
1 2019-09-28
Name: Starting Date, dtype: object] of type <class 'pandas.core.series.Series'> to Timestamp

被提出。

期望的输出:

  Ending Date FName  LName Starting Date
0 2020-01-18 Jon Doe 2019-09-28
1 2020-01-18 Bob Smith 2019-09-28

最佳答案

我假设开始日期结束日期都应该是datetime64[ns]类型。如果不是,请使用 pd.to_datetime 进行转换。

我注意到你只使用周六日期,所以你的情况是这样的我们的工作周每周只包含一个工作日,即仅限周六。

然后,如果我们使用定制业务,那​​么要完成您的任务就非常容易日历,包含用户定义的假期日期。

首先定义 CustomBusinessDay 偏移量,包括您的假期列表:

my_bday = pd.offsets.CustomBusinessDay(holidays=holidays, weekmask='Sat')

然后,计算 future n个工作日(实际上 - 也包括几周)的日期从给定日期 dat 开始,我们应该使用公式:dat + 10 * my_bday

因此,在您的情况下(开始日期列中的源数据和结果为保存在结束日期),运行:

df['Ending Date'] = df['Starting Date'].apply(lambda dat: dat + 10 * my_bday)

关于python - 如何补偿假期 - pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58152273/

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