如何将工作日中的整数列添加/减去日期时间列?

Posted

技术标签:

【中文标题】如何将工作日中的整数列添加/减去日期时间列?【英文标题】:How can I add/deduct a column of integer in Business Days to a column of datetime? 【发布时间】:2021-06-11 00:08:54 【问题描述】:

我的数据框如下:

ID Days of Holiday First Day of Holiday
A01 3 16/03/2021
B01 10 24/03/2021
C02 3 31/03/2021
D03 2 02/04/2021

我正在想办法创建另一列“假期返回的第一天”。

我尝试使用下面的 iterrow 循环 DF(上面的 DF 是“日历”):

for i, r in Calendar.iterrows():\
    Calendar["First Day of Return from holiday"] = Calendar["First Day of Holiday"] + pd.tseries.offsets.BDay(n = r["Days of Holiday"])

而且我没有得到正确的输出。

还有什么方法可以推荐给我吗?

基本上,寻找在工作日内将整数列添加/减去同一行的日期时间列的方法。

非常感谢!

【问题讨论】:

Days of Holiday 列是否包括周末或仅工作日? Business Days的逻辑我修改了代码,你可以查看 【参考方案1】:

你可以使用 lambda 函数:

df['First Day of Return from holiday'] = df.apply(lambda row: row.['First Day of Holiday'] + row.['Days of Holiday'], axis=1)

【讨论】:

【参考方案2】:

首先我们将假期日期的第一天转换为datetime 数据类型,将假期数转换为int 数据类型,然后我们以零开始新列。我们可以使用 BDay 函数迭代并将值分配给新列的每一行以获取工作日。然后我们可以将日期转换回我们需要的日期格式。

但是,日期将被转换为标准格式,可以使用.dt.strftime('%d/%m/%Y') 转换回所需的格式

import pandas as pd
from pandas.tseries.offsets import BDay

df['First Day of Holiday'] = pd.to_datetime(df['First Day of Holiday'])
df['Days of Holiday'] = df['Days of Holiday'].astype('int')
df['First Day of Return from holiday'] = [0]*len(df.index)
for i, r in df.iterrows():
    df.loc[i, 'First Day of Return from holiday'] = r['First Day of Holiday'] + BDay(n=r['Days of Holiday'])
df['First Day of Holiday'] = df['First Day of Holiday'].dt.strftime('%d/%m/%Y')
df['First Day of Return from holiday'] = pd.to_datetime(df['First Day of Return from holiday'])
df['First Day of Return from holiday'] = df['First Day of Return from holiday'].dt.strftime('%d/%m/%Y')
df

输出

【讨论】:

这完全有效!谢谢你。您对商务假期有其他建议吗?目前,“假期返回的第一天”仅不包括我认为的周末。但是在其他国家,比如在韩国,我有一个商务假期列表,需要将其排除在假期返回的第一天之外。 @VbC 你应该检查 Pandas 的 CustomBusinessDay 功能,这里是参考文档pandas.pydata.org/docs/reference/api/… @VbC 这里他们展示了如何创建一个定制的假日日历towardsdatascience.com/… @VbC 如果它解决了您的问题,您会考虑验证此答案是否正确吗?

以上是关于如何将工作日中的整数列添加/减去日期时间列?的主要内容,如果未能解决你的问题,请参考以下文章

Python PySpark:从日期列中减去整数列错误:列对象不可调用

BigQuery:将整数列转换为日期间隔并添加到日期列

减去熊猫中的日期时间列时返回错误

如何将文本列转换为 MS SQL Express 中的整数列?

如何将偏移值添加/减去日期时间并在 SQL 中返回新的日期时间值?

在 SQL 中加入表后,通过从当前日期中减去日期列来创建新列