You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:20:52