如何高效计算Pandas分组中每行的历史最大温度值?
高效计算各传感器累计最高温度的方案
针对你处理超200万行多传感器温度数据的场景,用groupby+cummax()是最优的高效方案,完全替代慢到离谱的apply方法。
核心思路
按传感器分组后,对每组的温度列计算截至当前行的累计最大值——这正是cummax()的原生功能,它是Pandas底层用C实现的向量化操作,性能比逐行/逐组循环的apply高几个数量级。
具体步骤
先确保数据按传感器+时间排序
累计最大值的前提是数据按时间顺序排列,否则结果会出错:# 假设你的DataFrame有sensor_id(传感器ID)和timestamp(时间戳)列 df = df.sort_values(['sensor_id', 'timestamp'])计算累计最高温度列
直接分组后调用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
相关产品推荐
相关产品推荐

