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

目录

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

一、需求描述

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

例如: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.hqwc.cn/news/179334.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Injection

SQL Injection SQL injection(SQL注入),通过在输入字段或URL查询参数中执行SQL命令,导致对数据库的未经授权的访问。如果SQL注入成功,未经授权的人可能会读取、创建、更新甚至删除数据库表的记录 举个例子:…

ZYNQ实验--Petalinux 安装

一、Petalinux 简介 PetaLinux是一个由Xilinx公司提供的嵌入式Linux开发工具套件,专门用于在Xilinx器件上构建、定制和部署嵌入式Linux系统。这个工具套件旨在简化嵌入式系统的开发过程,特别是针对使用Xilinx的可编程逻辑器件的系统。PetaLinux是Xilinx …

⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 约束 ⑦【MySQL】约束条件1. 约束的基本使用2.…

基于JavaWeb+SSM+社区居家养老服务平台—颐养者端微信小程序系统的设计和实现

基于JavaWebSSM社区居家养老服务平台—颐养者端微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 在复杂社会化网络中,灵活运用社会生活产生的大数据&am…

第四篇 基于JSP 技术的网上购书系统——系统设计(网上商城、仿淘宝、当当、亚马逊)

目录 1.系统总体设计 2.子系统结构与功能 2.2.1.用户后台管理 2.2.2.管理员后台订单管理 2.2.3.图书管理 2.3.4.评论留言 3. 开发环境配置 1.系统总体设计 按照需求分析中提出的功能需求,可以将系统分为多个子系统,同时,根据各个子…

箱线图(boxplot)

箱线图 boxplot 简述原理绘制方法python - matplotlib加载功能模块加载数据绘制boxplot python - seaborn加载功能模块加载数据绘制boxplot R - ggplot加载功能模块加载数据绘制boxplot 简述 因图形形状如箱子而得名。箱线图常用于展示一组连续型数据的分散情况。学术界普遍认…

11_聚类算法

文章目录 1 聚类1.1 什么是聚类1.2 相似度/距离公式1.3 聚类的思想 2 K-means算法2.1 K-means算法步骤2.2 K-means算法思考2.3 K-means算法优缺点 3 解决K-Means算法对初始簇心比较敏感的问题3.1 二分K-Means算法3.2 K-Means算法3.3 K-Means||算法3.4 Canopy算法3.4.1 Canopy算…

巷议:跌落尘埃与风光无限

近几来制造业的退潮是不争的事实,其中以老资格直辖市天津尤为突出。曾记否,想当年韩国的三星集团是天津最强的外企,但是从2015年开始便撤离了,给天津经济带来了重创。 而天津的汽车产业,也日渐变得软弱。其中那曾经小…

电脑检测温度软件有哪些?

环境: Win10 专业版 问题描述: 电脑检测温度软件有哪些? 解决方案: 有很多电脑检测温度的软件可供选择,以下是一些常用的电脑温度监测工具: HWMonitor:一款免费的硬件监控软件&#xff0…

手摸手入门Springboot2.7集成Swagger2.9.2

环境介绍 技术栈 springbootmybatis-plusmysqloracleSwagger 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 REST软件架构风格 REST即表述性状态传递(英文:Representational State T…

Leetcode周赛371补题(3 / 3)

目录 1、找出强数对的最大异或值 - 暴力 2、高访问员工 - 哈希表 模拟 3、最大化数组末位元素的最少操作次数 - 思维 贪心 1、找出强数对的最大异或值 - 暴力 找出强数对的最大异或值 I class Solution {public int maximumStrongPairXor(int[] a) {int na.length,max0;…

电子电机行业万界星空科技MES解决方案

现在电子电机行业规模越来越大,也伴随着生产和管理成本走向变高的现象。针对这个问题,mes系统就成为各电子电机制造业的最优选择。 电子机电行业MES涵盖了从原材料采购到最终产品交付的整个过程,包括生产计划、物料管理、生产过程监控、质量…