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

按日期分组计算DataFrame的Expanding Sum累计求和

按日期分组实现每日内累计求和(Expanding Sum)

没问题,你只需要先按日期对数据分组,再在每个分组内单独应用累计求和逻辑,就能实现每日内的累计效果啦!具体操作如下:

步骤1:处理日期列,提取分组依据

首先要确保creationDateTime是datetime类型,然后从中提取纯日期部分作为分组的键:

import pandas as pd

# 先转换为datetime类型(如果还没转的话)
data_aggregated['creationDateTime'] = pd.to_datetime(data_aggregated['creationDateTime'])
# 添加纯日期列,用于分组
data_aggregated['date'] = data_aggregated['creationDateTime'].dt.date

步骤2:分组后应用累计求和

按提取出的date列分组,然后对每个分组的OK和Fail列分别计算累计求和:

# 对每个日期组内的OK列做累计求和
data_aggregated['RollingOK'] = data_aggregated.groupby('date')['OK'].expanding().sum().reset_index(level=0, drop=True)
# 对每个日期组内的Fail列做累计求和
data_aggregated['RollingFail'] = data_aggregated.groupby('date')['Fail'].expanding().sum().reset_index(level=0, drop=True)

这里的reset_index(level=0, drop=True)是为了把分组后的索引还原,让计算结果能和原DataFrame的行一一对应上。

验证结果

运行完上面的代码后,你会得到和期望完全一致的结果:

creationDateTime OK Fail RollingOK RollingFail
2017-01-06 21:30:00 4 0 4 0
2017-01-06 21:35:00 4 0 8 0
2017-01-06 21:36:00 4 0 12 0
2017-01-07 21:48:00 3 1 3 1
2017-01-07 21:53:00 4 0 7 1
2017-01-08 21:22:00 3 1 3 1
2017-01-08 21:27:00 3 1 6 2
2017-01-09 21:49:00 3 1 3 1

补充说明:为什么原来的代码不符合需求?

你之前写的data_aggregated['OK'].expanding(0).sum()是对整个DataFrame的所有行做全局累计求和,会从第一行一直累加到最后一行;而我们需要的是每个日期组内部单独累计,所以必须先通过groupby按日期分组,再对每个分组应用expanding().sum()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:34:28