Python实现求解上个工作日逻辑

news2024/11/25 18:37:35

目录

      • 一、需求描述
      • 二、代码实现
      • 三、测试结果

一、需求描述

因工作需要,现需获取任意一个日期的上个工作日,要求考虑法定假日及周末。

例如:2024年2月10日(春节)的上一个工作日为2024年2月9日,2024年2月17日的上一个工作日仍为2024年2月9日,而2024年2月18日的上一个工作日为2月17日,以此类推

二、代码实现

# 获取上个工作日逻辑,包含节假日、调休逻辑
import datetime
import pandas as pd 
import chinese_calendar 

def get_last_workday(today):
    """
    获取上一个工作日的年月日字符串
    """
    weekday = today.weekday()

    # 如果今天是周天,上一个工作日是上周五;如果周六补班,上个工作日则是周六
    if weekday == 6:
        last_workday = today - datetime.timedelta(days=1)
        # 周六不上班则上个工作日为周五
        if chinese_calendar.is_holiday(last_workday): 
            last_workday -= datetime.timedelta(days=1)
        else:
            last_workday = today - datetime.timedelta(days=1) #不变
    else:
        # 否则,上一个工作日就是昨天
        last_workday = today - datetime.timedelta(days=1)

    # 如果上一个工作日是法定节假日,则调整为法定节假日结束后的第一个工作日
    while chinese_calendar.is_holiday(last_workday):
        last_workday -= datetime.timedelta(days=1)
    return last_workday.strftime('%Y-%m-%d')


def get_date_df(dates,last_workday_list):
    '''
    输出最终24年每天的对应上个工作日,以及当天的工作日标签
    '''
    date_df = pd.concat([pd.Series(dates),pd.Series(lastwork_day_list)],axis=1)
    date_df.columns = ['sc_date','last_work_day']
    date_df['is_workday'] = pd.Series(map(lambda x:1 if chinese_calendar.is_workday(x) else 0,dates))
    date_df ['sc_date'] = date_df['sc_date'].apply(lambda x:x.strftime('%Y-%m-%d'))
    return date_df 

if __name__ == '__main__':
    # 获取日期数据
    dates = pd.date_range(start='2024-01-01', end='2024-12-31')
    lastwork_day_list = list(map(get_last_workday,dates))
    data1 = get_date_df(dates,lastwork_day_list)

data1

输出结果如下,生成三列数据:第一列为2024年每天日期,第二列为其对应的上个工作日,第三列为是否为工作日标签

三、测试结果

以春节假期为例,分别取节中,节后的上个工作日,其对应的均是2月9日,而节后第二天的上个工作日则为2月18日;再以普通工作日2月26日(周一)为例,上个工作日则为2月23日(周五),验证结果均正确
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1217289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【入门篇】1.7 Redis 之 codis 入门介绍

文章目录 1. 简介2. Codis的安装与配置下载编译源码安装1. 安装 Go 运行环境2. 设置编译环境3. 下载 Codis 源代码4. 编译 Codis 源代码 Docker 部署 3. Codis的架构Codis的架构图和组件Codis的工作流程 4. Codis的核心特性自动数据分片数据迁移高可用性全面支持Redis命令分布式…

java代码审计(入门级)—基础漏洞合集

目录 (一)前言 (二)经典漏洞的代码审计 1、SQL注入 漏洞原理: 连接数据库的方式: 代码审计 2、XXE(XML外部实体注入) 漏洞原理 代码审计: 3、xss 漏洞原理 X…

LeetCode之二叉树

发现更多计算机知识,欢迎访问Cr不是铬的个人网站 最近数据结构学到二叉树,就刷了刷力扣,写这篇文章也是辅助记忆。 103二叉树锯齿形遍历 要解出本道题,首先要会层次遍历。层次遍历我们都知道用一个队列去实现就行。但是力扣这里…

【软件安装】Centos系统中安装docker容器(华为云HECS云耀服务器)

这篇文章,主要介绍Centos系统中安装docker容器(华为云HECS云耀服务器)。 目录 一、安装docker 1.1、卸载旧版本docker 1.2、更新repo镜像 1.3、安装依赖包 1.4、添加docker-ce镜像 1.5、安装docker-ce 1.6、查看docker安装版本 1.7、…

MATLAB 机械臂逆运动学进行轨迹控制建模

系列文章目录 文章目录 系列文章目录前言一、模型概览1.1 Target Pose Generation 目标姿势生成1.2 Inverse Kinematics 逆运动学1.3 Manipulator Dynamics 机械手动力学1.4 Pose Measurement 姿势测量 二、机械手定义三、生成航点四、模型设置五、模拟机械手运动六、将结果可视…

振南技术干货集:比萨斜塔要倒了,倾斜传感器快来!(2)

注解目录 1、倾斜传感器的那些基础干货 1.1 典型应用场景 (危楼、边坡、古建筑都是对倾斜敏感的。) 1.2 倾斜传感器的原理 1.2.1 滚珠式倾斜开关 1.2.2 加速度式倾斜传感器 1)直接输出倾角 2)加速度计算倾角 3)倾角精度的提高 (如果…

2023年亚太杯数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

【LeetCode】每日一题 2023_11_16 最长奇偶子数组(枚举,模拟)

文章目录 刷题前唠嗑K 个元素的最大和题目描述代码与解题思路 结语 刷题前唠嗑 LeetCode? 启动!!! 今天早上概率论期中,被爆杀完之后,下午数电,今天很疲惫很疲惫,一直拖到了现在,终…

【论文阅读】A Survey on Video Diffusion Models

视频扩散模型(Video Diffusion Model)最新综述GitHub 论文汇总-A Survey on Video Diffusion Models。 paper:[2310.10647] A Survey on Video Diffusion Models (arxiv.org) 0. Abstract 本文介绍了AIGC时代视频扩散模型的全面回顾。简要介…

目标检测—YOLO系列(一)(YOLOv1/2/v3/4/5/x/6/7/8)

目标检测概述 什么是目标检测? 滑动窗口(Sliding Window) 滑动窗口的效率问题和改进 滑动窗口的效率问题:计算成本很大 改进思路 1:使用启发式算法替换暴力遍历 例如 R-CNN,Fast R-CNN 中使用 Selectiv…

docker 部署日志平台出错汇总

第一次运行elasticsearch:8.11.1镜像,报错如下: [rootmaster ~]# docker run --name es03 --net elastic -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.11.1 docker: Error response from daemon: driver failed programmi…

网络编程TCP/UDP通信

1 网络通信概述 1.1 IP 和端口 所有的数据传输,都有三个要素 :源、目的、长度。 怎么表示源或者目的呢?请看图 所以,在网络传输中需要使用“IP 和端口”来表示源或目的。 1.2 网络传输中的 2 个对象:server 和 cl…

面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)

欢迎关注威♥“电击小子程高兴的MATLAB小屋”获取更多资料 该程序复现《面向配电网韧性提升的移动储能预布局与动态调度策略》,具体摘要内容见下图,程序主要分为两大模块,第一部分是灾前预防代码,该部分采用两阶段优化算法&#…

YOLOv8-Seg改进策略:全新的聚焦式线性注意力模块Focused Linear Attention | ICCV2023

🚀🚀🚀本文改进:深入分析了现有线性注意力方法的缺陷,并提出了一个全新的聚焦的线性注意力模块(Focused Linear Attention),同时具有高效性和很强的模型表达能力。 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,…

写论文技巧

目录 chatgpt数学公式英文润色中英互译如何搜和下载论⽂1 搜论⽂3 下载论⽂chatgpt 数学公式 英文润色

17. Series.dt.month-提取日期数据中的月份信息

【目录】 文章目录 17. Series.dt.month-提取日期数据中的月份信息1. 知识回顾-创建一个Series对象2. 知识回顾-pd.to_datetime()将数据转换为pandas中的日期时间格式3. 实例化类相关知识4. Series.dt.month是什么?5. 如何使用Series.dt.month?6. Series…

jQuery 【关于jQuery 、 jQuery简介、基础选择器、属性选择器、jQuery扩展】(一)-全面详解(学习总结---从入门到深化)

目录 关于jQuery jQuery简介 选择器之基础选择器(一) 选择器之基础选择器(二) 选择器之属性选择器(一) 选择器之属性选择器(二) 选择器之jQuery扩展(一) 选择器之jQuery扩展(二) 关于jQuery 现在是否还需要学习jQuery,毫无疑问到目前为止,我们仍然…

【Synopsys Bug记录】Synopsys工具显示license过期

首先查找网络配置,打开终端,输入ifconfig,看是否有ens33 若没有ens33,则说明linux的网卡因为某些原因未启用,我们需要更改ifcfg-ens33文件; 输入指令 cd ./etc/sysconfig/network-scripts sudo vim ifcfg-…

关于 内部类 你了解多少?(详解!!)

目录 1. 什么是内部类? 2. 内部类的分类 3. 内部类 3.1 实例内部类 3.2 静态内部类 4. 局部内部类 5. 匿名内部类 6.对象的打印 “不积跬步无以至千里,不积小流无以成江海。”每天坚持学习,哪怕是一点点!!&a…

企业微信获取第三方应用凭证

上一篇介绍了如何配置通用开发参数及通过url回调验证, 本篇将通过服务商后台配置关联小程序应用配置和获取第三方凭证及如何配置企业可信IP。 当然上篇配置的回调设置也不会白费,在下方的指令和数据回调会用到。 第三方应用开发流程 官方企业微信第三方…