首页 > 解决方案 > 如何将工作日中的整数列添加/减去日期时间列?

问题描述

我的数据框如下所示:

ID 节假日 假期第一天
A01 3 16/03/2021
B01 10 2021 年 3 月 24 日
C02 3 2021 年 3 月 31 日
D03 2 2021 年 2 月 4 日

我试图找出一种方法来创建另一列“假期返回的第一天”。

我尝试使用如下所示的 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"])

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

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

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

万分感谢!

标签: pythonpandasdataframeloopsdatetime

解决方案


首先,我们将假期日期的第一天转换为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

输出

在此处输入图像描述


推荐阅读