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

按ID、key分组并按日计算Speed累计求和的异常问题排查

问题原因及解决方法

问题根源

你当前代码的核心问题是逻辑错误:

  • 使用group.groupby(pd.Grouper(key='Time', freq='1d'))['Speed'].cumsum()时,cumsum是对每日分组内的每一行原始数据做累加,而非先计算每日的Speed总和再做累计。比如某天有3条数据,这一步会生成3个累加值(第1条的Speed、前2条的Speed和、前3条的Speed和),最终结果行数和原数据一致,自然远多于你期望的每日一行。
  • 循环中用append拼接DataFrame属于低效操作,但这不是导致行数超标的直接原因。

正确实现方式

要实现「每个ID、key组合下,每日一行的Speed累计求和」,需要分两步:先按天聚合每日Speed总和,再对这些日总和做跨天的累计。

方法一:显式提取日期列

import pandas as pd

df = pd.read_csv('df.csv')
df['Time'] = pd.to_datetime(df['Time'], format='%Y-%m-%d %H:%M:%S')
# 提取日期部分,方便分组
df['date'] = df['Time'].dt.date

# 1. 按ID、key、日期分组,计算每日Speed总和
daily_total = df.groupby(['ID', 'key', 'date'])['Speed'].sum().reset_index()

# 2. 按ID、key分组,对每日总和做累计求和
daily_total['cumulative_speed'] = daily_total.groupby(['ID', 'key'])['Speed'].cumsum()

# 整理最终结果(保留需要的列)
final_result = daily_total[['ID', 'key', 'date', 'cumulative_speed']]

方法二:直接使用时间分组器(更简洁)

import pandas as pd

df = pd.read_csv('df.csv')
df['Time'] = pd.to_datetime(df['Time'], format='%Y-%m-%d %H:%M:%S')

# 一步完成:先按ID、key、天粒度分组求和,再在ID、key组内做累计
final_result = (
    df.groupby(['ID', 'key', pd.Grouper(key='Time', freq='1d')])['Speed']
    .sum()
    .groupby(level=['ID', 'key'])
    .cumsum()
    .reset_index(name='cumulative_speed')
)

结果说明

最终的final_result中,每个ID+key组合下,每一行对应一天的累计Speed值(即从该组合的第一天到当前天的Speed总和),行数与你期望的一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:39:19