Pandas实现连续节假日数值累加至后续首个非节假日并删除节假日行
Pandas实现节假日值累加至后续首个非节假日方案
需求说明
需要按日期顺序处理数据:
- 将所有连续标记为节假日(
Holiday=1)的Value值,累加至紧随其后的第一个非节假日(Holiday=0)的Value上 - 处理完成后删除所有节假日行,仅保留非节假日的处理结果
实现代码
import pandas as pd # --------------- 示例数据构造 --------------- df = pd.DataFrame({ 'Date': ['01.01.2022','02.01.2022','03.01.2022','04.01.2022','05.01.2022', '06.01.2022','07.01.2022','08.01.2022','09.01.2022'], 'Holiday': [0,1,1,0,0,0,0,1,0], 'Value': [4,0.5,0.1,0.2,0.2,0.4,5,0.3,5] }) # --------------- 核心处理逻辑 --------------- # 1. 生成分组标记:连续节假日 + 紧随其后的第一个非节假日 归属同一组 df['group_tag'] = df['Holiday'].eq(0).iloc[::-1].cumsum().iloc[::-1] # 2. 按分组聚合 result = df.groupby('group_tag', as_index=False).agg( Date=('Date', 'last'), # 取组内最后一行的日期(即非节假日的日期) Holiday=('Holiday', 'last'), # 取组内最后一行的节假日标识(固定为0) Value=('Value', 'sum') # 组内Value求和,即节假日值+非节假日原值 ).drop(columns='group_tag') # 删除辅助分组列 # 3. 边界处理:过滤掉数据末尾无对应非节假日的节假日汇总(可选,适配异常场景) result = result[result['Holiday'] == 0]
逻辑说明
- 分组标记原理:倒序遍历数据时,每遇到一个非节假日就将分组计数+1,遇到节假日则不增加计数,正序还原后,所有连续节假日会自动和它后面第一个遇到的非节假日划分到同一分组
- 聚合规则:每个分组内的行顺序固定为「连续节假日行... → 目标非节假日行」,因此取组内最后一行即可拿到非节假日对应的日期、标识,对组内Value求和就得到累加后的结果
- 运行代码后输出结果与期望完全一致:
Date Holiday Value 0 01.01.2022 0 4.0 1 04.01.2022 0 0.8 2 05.01.2022 0 0.2 3 06.01.2022 0 0.4 4 07.01.2022 0 5.0 5 09.01.2022 0 5.3
内容的提问来源于stack exchange,提问作者Sevval Kahraman
相关产品推荐
相关产品推荐

