1

我有以下数据框

df = pd.DataFrame({'Start_Date': ['2018-08-23', '2018-08-16', '2018-08-24', '2018-08-29'], 'Days': ['3', '1', '3', '0']})

我想创建一个新列“End_Date”。End_Date 将是 Start_Date + 天。此外,End_Date 应该只是工作日(不包括周末)。

预计出局

Start Date      Days   End_Date
2018-08-23      3      2018-08-28    
2018-08-16      1      2018-08-17
2018-08-24      3      2018-08-29
2018-08-29      0      2018-08-29

我曾尝试使用omz的解决方案,但它对我不起作用。我试过使用工作日功能,但这也不起作用。

任何的想法?

4

2 回答 2

0

您可以通过这种方式使用BDay

from pandas.tseries.offsets import BDay

df['Start_Date'] = pd.to_datetime(df['Start_Date'])
df['End_Date']  = df.apply(lambda x: x['Start_Date'] + BDay(x['Days']), axis=1)

输出:

   Days Start_Date   End_Date
0     3 2018-08-23 2018-08-28
1     1 2018-08-16 2018-08-17
2     3 2018-08-24 2018-08-29
3     0 2018-08-29 2018-08-29
于 2018-11-27T07:34:15.140 回答
0

您可以使用numpy.busday_offset获得下一个工作日。

In [1]: import numpy as np

In [2]: df['End_Date'] = df.apply(lambda x: np.busday_offset(x[0], x[1]), axis=1)

In [3]: df
Out[3]:
   Start_Date Days   End_Date
0  2018-08-23    3 2018-08-28
1  2018-08-16    1 2018-08-17
2  2018-08-24    3 2018-08-29
3  2018-08-29    0 2018-08-29
于 2018-11-27T07:35:21.857 回答