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

如何在Pandas DataFrame中创建长周末后工作日标识列?

实现Pandas DataFrame新增长周末后工作日标记列的方法

核心思路

先统一标记所有节假日(周六/周日、全国/省级节假日),再识别符合规则的连续长假期,最后标记假期后的第一个工作日。


步骤1:构建统一的节假日标记列

首先将周六/周日、全国节假日、省级节假日统一标记为节假日,生成is_holiday列:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame(
    [[0, 1, 'Fri'], [0, 0, 'Sat'], [0, 0, 'Sun'], [0, 0, 'Mon'],
     [0, 0, 'Tue'], [0, 0, 'Wed'], [0, 0, 'Thu'], [0, 1, 'Fri'],
     [0, 0, 'Sat'], [0, 0, 'Sun'], [1, 0, 'Mon'], [0, 0, 'Tue']],
    columns=['national_holiday', 'provincial_holiday','day_of week']
)

# 标记节假日:满足任一条件则为1,否则为0
df['is_holiday'] = (
    df['day_of week'].isin(['Sat', 'Sun']) |
    (df['national_holiday'] == 1) |
    (df['provincial_holiday'] == 1)
).astype(int)

步骤2:标记长周末后工作日

通过分组识别连续假期,判断假期是否符合长周末规则(包含周末或起始于周五),再标记假期后的第一个工作日:

# 初始化目标列
df['day_after_long_weekend'] = 0

# 生成连续假期的分组ID:假期状态变化时分组ID递增
df['holiday_group'] = (df['is_holiday'] != df['is_holiday'].shift()).cumsum()

# 遍历所有连续假期组
for group_id, holiday_group in df[df['is_holiday'] == 1].groupby('holiday_group'):
    # 判断当前假期是否符合长周末规则
    has_weekend = holiday_group['day_of week'].isin(['Sat', 'Sun']).any()
    has_fri_holiday = (holiday_group['day_of week'] == 'Fri').any()
    
    if has_weekend or has_fri_holiday:
        last_holiday_idx = holiday_group.index[-1]
        # 确保不是DataFrame最后一行,避免索引越界
        if last_holiday_idx < df.index[-1]:
            df.loc[last_holiday_idx + 1, 'day_after_long_weekend'] = 1

验证结果

执行代码后,查看目标列的结果:

print(df[['day_of week', 'is_holiday', 'day_after_long_weekend']])

输出结果:

day_of week  is_holiday  day_after_long_weekend
0          Fri           1                       0
1          Sat           1                       0
2          Sun           1                       0
3          Mon           0                       1
4          Tue           0                       0
5          Wed           0                       0
6          Thu           0                       0
7          Fri           1                       0
8          Sat           1                       0
9          Sun           1                       0
10         Mon           1                       0
11         Tue           0                       1

结果完全符合需求规则:

  • 第一组假期(周五-周日)后的周一被标记为1
  • 第二组假期(周五-周一)后的周二被标记为1

内容的提问来源于stack exchange,提问作者User771

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:45:41