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

如何基于含tripId的GPS坐标DataFrame计算每段行程总距离与时长

行程总距离与总时长计算方案

首先将你已经算好的步长距离合并到原DataFrame中,同时修正每个行程首行的无效步长值:

import pandas as pd

# 合并步长距离列
df['distance_K'] = pd.Series(haversine_vector(df, df.shift(),Unit.KILOMETERS), index=df.index)
# 每个trip的首行步长是和上一个trip末行计算的无效值,统一置为0
df.loc[df.groupby('tripId').head(1).index, 'distance_K'] = 0

计算单行程总距离

使用pandas分组聚合功能替代你写的for循环,性能更高且不会出现链式赋值问题:

  • 如果你需要单独的行程统计结果表:
trip_stats = df.groupby('tripId', as_index=False)['distance_K'].sum().rename(columns={'distance_K': 'total_distance_km'})
  • 如果你需要把总距离回写到原DataFrame的每一行,和你原有循环效果一致:
df['total_distance_km'] = df.groupby('tripId')['distance_K'].transform('sum')

计算单行程总时长

首先确保timestamp列为datetime类型,再按tripId分组计算时间差:

# 转换时间列类型(如果已经是datetime类型可以跳过这步)
df['timestamp'] = pd.to_datetime(df['timestamp'])
  • 单独统计结果写入trip_stats表:
trip_stats['total_duration'] = df.groupby('tripId')['timestamp'].apply(lambda x: x.max() - x.min()).values
  • 回写总时长到原DataFrame每一行:
df['total_duration'] = df.groupby('tripId')['timestamp'].transform(lambda x: x.max() - x.min())

如果需要转换时长单位,可使用dt属性处理,例如转换为分钟:

trip_stats['total_duration_min'] = trip_stats['total_duration'].dt.total_seconds() / 60

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:36:03