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

如何计算DataFrame中不同ID组首尾经纬度差值并筛选符合范围的ID对

解决方案:计算不同ID间经纬度差值并筛选符合条件的ID对

首先我们需要先提取每个ID的第一条(最小Counter)和最后一条(最大Counter)记录的经纬度,再生成所有不同的ID对计算差值,最后筛选出符合范围的结果。以下是基于pandas的完整实现:

步骤1:预处理数据并提取关键记录

首先确保数据按ID和Counter排序,这样能准确获取每个ID的首尾记录:

import pandas as pd

# 先按ID和Counter排序,保证首尾记录对应最小/最大Counter
df_sorted = df.sort_values(['ID', 'Counter'])

# 提取每个ID的第一条记录的经纬度
first_records = df_sorted.groupby('ID').agg(
    first_lat=('Latitude', 'first'),
    first_lon=('Longitude', 'first')
).reset_index()

# 提取每个ID的最后一条记录的经纬度
last_records = df_sorted.groupby('ID').agg(
    last_lat=('Latitude', 'last'),
    last_lon=('Longitude', 'last')
).reset_index()

步骤2:生成所有不同的ID对并计算差值

通过笛卡尔积合并首尾记录,排除ID相同的无效情况,然后计算经纬度差值:

# 添加临时键实现笛卡尔积合并,得到所有可能的ID组合
first_records['temp_key'] = 1
last_records['temp_key'] = 1

all_pairs = pd.merge(
    last_records, 
    first_records, 
    on='temp_key', 
    suffixes=('_last', '_first')
).drop('temp_key', axis=1)

# 排除ID相同的对(自己和自己的无意义对比)
all_pairs = all_pairs[all_pairs['ID_last'] != all_pairs['ID_first']]

# 计算纬度差和经度差
all_pairs['latitude_diff'] = all_pairs['last_lat'] - all_pairs['first_lat']
all_pairs['longitude_diff'] = all_pairs['last_lon'] - all_pairs['first_lon']

步骤3:筛选符合差值范围的ID对

根据你的需求自定义差值范围,这里以纬度差在[-0.5, 0.5]、经度差在[-0.5, 0.5]为例:

# 自定义差值范围,可根据实际需求修改
lat_range = (-0.5, 0.5)
lon_range = (-0.5, 0.5)

# 筛选符合条件的ID对
filtered_pairs = all_pairs[
    all_pairs['latitude_diff'].between(*lat_range) &
    all_pairs['longitude_diff'].between(*lon_range)
]

# 保留核心结果列,方便查看
final_result = filtered_pairs[['ID_last', 'ID_first', 'latitude_diff', 'longitude_diff']]
print(final_result)

可选:获取无序唯一ID对

如果不需要区分(AAA, BBB)和(BBB, AAA)这类反向对,可以添加以下代码去重:

# 生成有序的ID对标识,用于去重
filtered_pairs['sorted_id_pair'] = filtered_pairs.apply(
    lambda row: tuple(sorted([row['ID_last'], row['ID_first']])),
    axis=1
)

# 去重后保留唯一无序对
unique_pairs = filtered_pairs.drop_duplicates('sorted_id_pair').drop('sorted_id_pair', axis=1)

这个方案可以灵活调整差值范围,也能处理任意数量的ID数据,完全适配你给出的DataFrame结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:41:37