Рассчитать количество выходных (суббота и воскресенье) между двумя датами - PullRequest
2 голосов
/ 04 мая 2019

У меня есть фрейм данных с двумя столбцами даты, даты начала и окончания. Как я найду количество выходных между начальной и конечной датами, используя pandas или python date-times

Я знаю, что у панд есть DatetimeIndex, который возвращает значения от 0 до 6 для каждого дня недели, начиная с понедельника

# create a data-frame
import pandas as pd
df = pd.DataFrame({'start_date':['4/5/19','4/5/19','1/5/19','28/4/19'],
                   'end_date': ['4/5/19','5/5/19','4/5/19','5/5/19']})

# convert objects to datetime format
df['start_date'] = pd.to_datetime(df['start_date'], dayfirst=True)
df['end_date'] = pd.to_datetime(df['end_date'], dayfirst=True)

# Trying to get the date index between dates as a prelim step but fails
pd.DatetimeIndex(df['end_date'] - df['start_date']).weekday

Я ожидаю, что результат будет таким: (weekend_count включает даты начала и окончания)

start_date  end_date    weekend_count
4/5/2019    4/5/2019    1
4/5/2019    5/5/2019    2
1/5/2019    4/5/2019    1
28/4/2019   5/5/2019    3

Ответы [ 2 ]

2 голосов
/ 04 мая 2019

IIUC

df['New']=[pd.date_range(x,y).weekday.isin([5,6]).sum() for x , y in zip(df.start_date,df.end_date)]
df
  start_date   end_date  New
0 2019-05-04 2019-05-04    1
1 2019-05-04 2019-05-05    2
2 2019-05-01 2019-05-04    1
3 2019-04-28 2019-05-05    3
1 голос
/ 04 мая 2019

Попробуйте с:

df['weekend_count']=((df.end_date-df.start_date).dt.days+1)-np.busday_count(
                     df.start_date.dt.date,df.end_date.dt.date)
print(df)

  start_date   end_date  weekend_count
0 2019-05-04 2019-05-04              1
1 2019-05-04 2019-05-05              2
2 2019-05-01 2019-05-04              1
3 2019-04-28 2019-05-05              3
...