【问题标题】:Calculate next date without saturday计算没有星期六的下一个日期
【发布时间】:2022-01-28 20:43:20
【问题描述】:

我想计算卡车在星期六(但不是星期日)静止不动的交货日期 如果交货时间是两天,我在星期五下订单,货物应该在星期一(星期日+星期一)到达。以下内容很好,但不包括星期日:

df['LEV'] = dat + df['Leadtime'].map(pd.tseries.offsets.BusinessDay)

我想做这样的事情。但它不起作用:

df['LEV'] = dat + df['Leadtime'].map(pd.tseries.offsets.CustomBusinessDay(weekmask = 'Mon Tue Wed Thu Fri Sun'))

地点:

2021-05-14 00:00:00
<class 'datetime.datetime'>
<class 'pandas.core.series.Series'>

谢谢

编辑: 小例子:

from datetime import datetime
DatToday = datetime.fromisoformat('2022-01-13')
data = {'Article': ['A1', 'A2'], 'LeadTime': [2, 6], 'DateToday': 
[DatToday,DatToday]}    
df = pd.DataFrame(data)  


df['Delivery_Day'] = DatToday + df['LeadTime'].map(pd.tseries.offsets.BusinessDay)

当前结果:

Article    LeadTime  DateToday     Delivery_Day
0     A1    2        2022-01-13    2022-01-17
1     A2    6        2022-01-13    2022-01-21

想要的结果:

Article    LeadTime  DateToday     Delivery_Day
0     A1    2        2022-01-13    2022-01-16
1     A2    6        2022-01-13    2022-01-20

即没有星期日的工作日。

错误信息:

~\Anaconda3\lib\site-packages\pandas\core\series.py in apply(self, func, 
convert_dtype, args, **kwds)
4198             else:
4199                 values = self.astype(object)._values
-> 4200                 mapped = lib.map_infer(values, f, 
convert=convert_dtype)
4201 
4202         if len(mapped) and isinstance(mapped[0], Series):

pandas\_libs\lib.pyx in pandas._libs.lib.map_infer()

pandas\_libs\tslibs\offsets.pyx in 
pandas._libs.tslibs.offsets.BaseOffset.__call__()

pandas\_libs\tslibs\offsets.pyx in 
pandas._libs.tslibs.offsets.apply_wraps.wrapper()

ApplyTypeError: 

【问题讨论】:

  • 你说它“不工作”你得到什么输出?什么输入?
  • 当然可以。我收到 ApplyTypeError:.输入 LeadTime 是整数。
  • 请提供一个可重现的最小示例
  • 嗨!我已经用一个小的可运行示例更新了我的原始帖子:)
  • 请在您的问题中提供错误回溯,而不是在评论中。

标签: python pandas date


【解决方案1】:

您需要将您的CustomBusinessDay乘以天数:

cbd = pd.tseries.offsets.CustomBusinessDay(weekmask='Mon Tue Wed Thu Fri Sun')

df['Delivery_Day'] = DatToday + df['LeadTime'] * cbd

输出:

  Article  LeadTime  DateToday Delivery_Day
0      A1         2 2022-01-13   2022-01-16
1      A2         6 2022-01-13   2022-01-20

【讨论】:

  • @fsl 您也可以使用lambda 设置星期掩码并通过map 将LeadTime 传递给它,但我认为这样更容易;)
猜你喜欢
  • 2012-01-28
  • 2022-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
相关资源
最近更新 更多