使用Pandas计算DataFrame中日期到节假日的前后天数
计算Pandas DataFrame中日期与上下节假日的天数差
核心思路
利用Pandas的ffill()(向前填充)和bfill()(向后填充)方法,先为每个日期匹配最近的上一个/下一个节假日日期,再通过日期差值计算天数。
步骤实现
1. 确保日期列是datetime类型
如果你的date列还不是datetime格式,先转换:
import pandas as pd # 转换日期列类型(如果需要) df['date'] = pd.to_datetime(df['date'])
2. 计算距离上一个节假日的天数
# 标记出所有节假日的日期,非节假日位置设为NaN df['prev_holiday'] = df['date'].where(df['isHoliday'] == 1) # 向前填充,让每个日期获取最近的上一个节假日日期 df['prev_holiday'] = df['prev_holiday'].ffill() # 计算天数差 df['days_since_last_holiday'] = (df['date'] - df['prev_holiday']).dt.days
3. 计算距离下一个节假日的天数
# 标记出所有节假日的日期,非节假日位置设为NaN df['next_holiday'] = df['date'].where(df['isHoliday'] == 1) # 向后填充,让每个日期获取最近的下一个节假日日期 df['next_holiday'] = df['next_holiday'].bfill() # 计算天数差 df['days_until_next_holiday'] = (df['next_holiday'] - df['date']).dt.days
注意事项
- 如果你的日期序列不连续,请先按
date列排序,必要时补全缺失的日期(比如用pd.date_range生成连续日期后合并),否则ffill和bfill无法正确匹配最近的节假日。 - 若DataFrame的第一条记录不是节假日,
ffill()会保留NaN,此时days_since_last_holiday也会是NaN,你可以根据需求用fillna()处理(比如设为一个极大值或0);同理,最后一条记录不是节假日时,bfill()也会保留NaN,需按需处理。
内容的提问来源于stack exchange,提问作者hatice
相关产品推荐
相关产品推荐

