Python добавляет int к дате и возвращает только дату в будние дни, игнорируя выходные - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть следующий фрейм данных

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 + Days.Кроме того, 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 , но оно не работает длямне.Я пытался использовать функцию рабочего дня, но это также не работает.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Вы можете использовать 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
0 голосов
/ 27 ноября 2018

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...