根据 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 中的每个日期,从“假期”列表中到下一个和自上一个假期开始的天数。 所以我需要如下结果(当然,如果我正确计算了天数,但如下所示):

enter image description here

解决方法

在此处使用 merge_asof 并使用默认 direction='backward'direction='forward' 添加列,然后通过将 timedeltas 转换为天数减去 Series.dt.daysDataFrame.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,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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...