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

如何用Pandas实现假期补偿?日期调整计算问题求助

解决假期补偿的日期循环调整问题

首先,你的原代码报错核心原因是pd.date_range()无法直接接收Series作为起始/结束参数——它需要单个日期值,而不是整列数据。我们需要逐行处理每个用户的日期范围,同时实现循环补偿逻辑,直到新增的时间段里没有需要补偿的假期为止。

步骤1:统一日期格式

先把Starting Date列从字符串转换为datetime类型,避免后续日期计算出错:

import pandas as pd
from pandas import Timestamp

# 初始化你的数据
df = pd.DataFrame({
    'Ending Date': [Timestamp('2019-12-08 00:00:00'), Timestamp('2019-12-08 00:00:00')],
    'FName': ['Jon', 'Bob'],
    'LName': ['Doe', 'Smith'],
    'Starting Date': ['2019-09-29', '2019-09-29']
})
holidays = pd.Series([
    Timestamp('2019-09-14'), Timestamp('2019-10-05'), Timestamp('2019-10-12'),
    Timestamp('2019-10-26'), Timestamp('2019-12-21'), Timestamp('2019-12-28'),
    Timestamp('2020-01-04'), Timestamp('2020-01-25'), Timestamp('2020-02-01'),
    Timestamp('2020-02-29'), Timestamp('2020-04-04'), Timestamp('2020-05-02')
])

# 转换起始日期为datetime类型
df['Starting Date'] = pd.to_datetime(df['Starting Date'])

步骤2:编写循环补偿的核心函数

我们需要一个函数来处理单条记录的日期调整,循环计算需要补偿的周数,直到没有新增假期需要处理:

def adjust_end_date(start_date, initial_end_date, holidays):
    current_end = initial_end_date
    while True:
        # 先筛选出假期列表中的周六(符合你"统计属于假期列表的周六"的需求)
        holiday_saturdays = holidays[holidays.dt.weekday == 5]  # 5代表周六
        # 统计当前日期范围内的符合条件的假期数量
        n = holiday_saturdays[(holiday_saturdays >= start_date) & (holiday_saturdays <= current_end)].count()
        
        if n == 0:
            break  # 没有需要补偿的假期,退出循环
        # 增加n周的补偿时间
        current_end += pd.Timedelta(weeks=n)
        # 更新起始日期,避免重复统计已经处理过的假期
        start_date = current_end - pd.Timedelta(weeks=n) + pd.Timedelta(days=1)
    return current_end

如果你需要统计的是时间段内所有属于假期的天数(不限周几),只需要去掉holidays.dt.weekday ==5这部分过滤逻辑即可。

步骤3:将函数应用到DataFrame

用apply逐行处理每条记录,更新Ending Date列:

df['Ending Date'] = df.apply(
    lambda row: adjust_end_date(row['Starting Date'], row['Ending Date'], holidays),
    axis=1
)

验证最终结果

运行后你会得到期望的输出:

Ending Date FName LName Starting Date
0  2020-01-18   Jon   Doe    2019-09-29
1  2020-01-18   Bob Smith    2019-09-29

内容的提问来源于stack exchange,提问作者U13-Forward

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:10:58