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

为按日期分组后的Pandas DataFrame添加is_holiday列

问题描述

我有两个DataFrame:

  • Before:包含小时级时间戳、cnt(租赁量)、is_holiday(是否节假日的小时级标记)等字段的原始自行车租赁数据
  • After:通过Pandas按日期分组求和cnt得到的日级数据

需要给After新增is_holiday列(当日为节假日则标记1,否则0),用来分析节假日和非节假日的租赁量差异,请问怎么修改分组代码实现这个需求?


解决方案

方法1:分组时同时聚合两个字段

同一天的is_holiday值应该是统一的(要么全天都是节假日,要么都不是),所以分组时可以对is_holiday取max()或者first(),同时求和cnt:

# 先把小时级时间戳转成日期格式(如果还没处理的话)
Before['date'] = Before['timestamp'].dt.date

# 分组聚合:sum统计当日总租赁量,max提取当日是否为节假日
After = Before.groupby('date').agg(
    cnt=('cnt', 'sum'),
    is_holiday=('is_holiday', 'max')  # 也可以用'first'/'last',根据实际业务逻辑选
).reset_index()

注:如果当日所有小时的is_holiday都是0,max()返回0;只要有一个小时标记为1(比如节假日当天全时段标记1),就返回1,完全符合需求。

方法2:给已生成的After补全字段

如果已经有现成的After数据,可以单独提取每日的节假日标记再合并:

# 先提取每日的is_holiday标记
daily_holiday = Before.groupby('date')['is_holiday'].max().reset_index()

# 和已有的After数据合并
After = After.merge(daily_holiday, on='date', how='left')

方法3:先标记日级节假日再聚合

先给每一行数据添加上当日的节假日标记,再分组求和:

Before['date'] = Before['timestamp'].dt.date
# 用transform给每行生成当日的is_holiday标记
Before['daily_holiday'] = Before.groupby('date')['is_holiday'].transform('max')

# 分组求和租赁量,同时保留日级节假日标记
After = Before.groupby('date').agg(
    cnt=('cnt', 'sum'),
    is_holiday=('daily_holiday', 'first')
).reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:45:02