如何将工作日中的整数列添加/减去日期时间列?
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:从日期列中减去整数列错误:列对象不可调用
如何将文本列转换为 MS SQL Express 中的整数列?