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

Pandas:按同行程ID分组提取下一行值新增经纬度列

你可以直接使用Pandas内置的groupby+shift方法实现需求,步骤和代码如下:

注意前提

先确保你的数据集已经按照id_trip、trip_schedule两个字段升序排序,避免行顺序混乱导致取数错误。

核心实现代码

import pandas as pd

# 假设你的原始数据已经读取为DataFrame,变量名为df
# 排序步骤(如果数据已经是有序的可以省略,建议保留避免异常)
df = df.sort_values(by=['id_trip', 'trip_schedule']).reset_index(drop=True)

# 分组后取同组下一行的经纬度作为当前行的stop经纬度
df[['stop_longitude', 'stop_latitude']] = df.groupby('id_trip')[['start_longitude', 'start_latitude']].shift(-1)

代码说明

  • groupby('id_trip') 会按照行程ID拆分数据,所有操作只会在同一个行程的内部生效,不会跨行程取数
  • shift(-1) 的作用是将分组内的整列数据向上偏移1位,当前行就能匹配到下一行的对应值,分组内的最后一行没有下一行数据,会自动填充NaN,完全匹配你的需求。

完整测试示例

你可以直接运行下面的代码验证效果:

# 构造测试数据
data = {
    'id_trip': ['AAAAAAAA', 'AAAAAAAA', 'BBBBBBBB', 'BBBBBBBB'],
    'trip_schedule': [1, 2, 1, 2],
    'start_longitude': [-5.697868, -5.698459, -5.696362, -5.696071],
    'start_latitude': [42.393038, 42.394158, 42.398740, 42.401731]
}
df = pd.DataFrame(data)

# 执行逻辑
df = df.sort_values(by=['id_trip', 'trip_schedule']).reset_index(drop=True)
df[['stop_longitude', 'stop_latitude']] = df.groupby('id_trip')[['start_longitude', 'start_latitude']].shift(-1)

# 输出结果
print(df)

运行后输出的结果和你期望的格式完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:06:05