Расчет дней до следующего и с момента последнего отпуска на основе даты в кадре данных в Python Pandas?

У меня есть кадр данных, как показано ниже:

import pandas as pd
df = pd.DataFrame()
df["date"] = pd.date_range("2015", periods=5)

И список праздников типа: holidays = ["30.12.2014", "02.01.2015", "10.10.2015"]

И я хотел бы рассчитать для каждой даты в df количество дней до следующего и с последнего праздничного дня из списка праздников. Итак, мне нужен результат, как показано ниже (если, конечно, я правильно рассчитываю количество дней, но что-то вроде ниже):

введите здесь описание изображения


person bruno845    schedule 26.02.2021    source источник


Ответы (1)


Используйте здесь merge_asof со значениями по умолчанию direction='backward' и direction='forward'. для добавления столбца, а затем вычесть с преобразованием timedeltas в дни на Series.dt.days и DataFrame.pop для использования и удаления столбцов:

df = pd.DataFrame()
df["date"] = pd.date_range("2015", periods=5)

holidays = ["30.12.2014", "02.01.2015", "10.01.2015"]
holidays = pd.to_datetime(holidays, dayfirst=True)

df1 = pd.DataFrame({'date1':holidays})

df = pd.merge_asof(df, df1, left_on='date', right_on='date1', direction='forward')
df = pd.merge_asof(df, df1, left_on='date', right_on='date1')

df['until'] = df.pop('date1_x').sub(df['date']).dt.days
df['since'] = df['date'].sub(df.pop('date1_y')).dt.days
print (df)
        date  until  since
0 2015-01-01      1      2
1 2015-01-02      0      0
2 2015-01-03      7      1
3 2015-01-04      6      2
4 2015-01-05      5      3
person jezrael    schedule 26.02.2021
comment
и, может быть, вы знаете, как добавить еще 2 столбца 1 со следующим праздником и 1 с последним праздником? - person bruno845; 26.02.2021
comment
@ bruno845 - хм, может быть, лучший новый вопрос для поста, не такой уж простой. - person jezrael; 26.02.2021