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

pandas按ID分组计算GPS速度后如何回填至原DataFrame并优化性能

高效实现方案

核心优化逻辑是替换手动循环append的反模式,使用pandas原生groupby.apply的自动合并能力,性能可以提升几十到上百倍。

实现代码

import pandas as pd
import numpy as np

def add_group_speed(group):
    if len(group) < 2:
        group['speed'] = 0.0
    else:
        # 确保你的gps_speed函数返回长度与分组行数一致的数组
        group['speed'] = gps_speed(group['Latitude'], group['Longitude'], group['TimeUTC'])
    return group

# 按ID分组处理后自动合并为完整DataFrame
result_df = df.groupby('ID', group_keys=False).apply(add_group_speed)
# 补充空值填充逻辑,和原有业务逻辑对齐
result_df['speed'] = result_df['speed'].fillna(0)

原方案性能问题原因

DataFrame.append每次调用都会生成全新的DataFrame实例,全量复制已有数据,分组数量越多耗时会呈指数级上升,属于pandas操作的典型反模式。

之前transform调用失败的原因

transform要求每个分组的返回结果长度必须和分组本身的行数一致,你之前定义的ucap_speed_desired函数在分组长度<2时返回的是单个数值0,不是长度为1的序列,因此会触发匹配错误。如果要使用transform,只需修改返回值格式即可,但上述apply方案更简洁不易出错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:48:02