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

如何高效计算Pandas分组中每行的历史最大温度值?

高效计算各传感器累计最高温度的方案

针对你处理超200万行多传感器温度数据的场景,用groupby+cummax()是最优的高效方案,完全替代慢到离谱的apply方法。

核心思路

按传感器分组后,对每组的温度列计算截至当前行的累计最大值——这正是cummax()的原生功能,它是Pandas底层用C实现的向量化操作,性能比逐行/逐组循环的apply高几个数量级。

具体步骤

  1. 先确保数据按传感器+时间排序
    累计最大值的前提是数据按时间顺序排列,否则结果会出错:

    # 假设你的DataFrame有sensor_id(传感器ID)和timestamp(时间戳)列
    df = df.sort_values(['sensor_id', 'timestamp'])
    
  2. 计算累计最高温度列
    直接分组后调用cummax():

    # temperature是存储温度的列名,替换成你实际的列名
    df['max_prev_temp'] = df.groupby('sensor_id')['temperature'].cummax()
    

关于rolling的替代方案

如果一定要用rolling体系的方法,可以结合expanding()(等价于窗口大小随行数增长的rolling),但性能不如cummax():

df['max_prev_temp'] = df.groupby('sensor_id')['temperature'].expanding().max().reset_index(level=0, drop=True)

性能对比

  • apply方法:逐组执行Python循环,处理200万行可能需要数分钟甚至更久
  • cummax():向量化操作,处理同量级数据通常只需要几秒

注意事项

  • 如果温度列存在缺失值,cummax()默认会跳过缺失值,若要保留缺失值,可添加参数:cummax(skipna=False)
  • 确保sensor_id列的类型是字符串或整数,避免分组时出现意外错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:50:25