You need to enable JavaScript to run this app. 嵌套循环实现Haversine距离计算并生成成员地点远近排名DataFrame
优惠活动
大模型
产品
解决方案
定价
更多

嵌套循环实现Haversine距离计算并生成成员地点远近排名DataFrame

原代码的核心问题有两个:

  • 循环内覆盖了存储临时结果的df、df_2变量,没有保留每个成员的计算结果
  • 冗余的索引重置、单行列DataFrame创建操作容易引发索引对齐错误

修正后的可运行代码如下:

import pandas as pd
# 此处默认你已经正确实现了haversine距离计算函数

# 初始化总结果存储列表
final_result = []

for m in range(len(members)):
    # 取出当前成员的基础信息
    curr_member = members.iloc[m]
    member_id = curr_member["member_id"]
    mem_lon = curr_member["longitude"]
    mem_lat = curr_member["latitude"]
    
    # 计算当前成员到所有地点的距离
    loc_dist_list = []
    for s in range(len(locations)):
        curr_loc = locations.iloc[s]
        dist = haversine(
            lon1 = mem_lon,
            lat1 = mem_lat,
            lon2 = curr_loc["Longitude"],
            lat2 = curr_loc["Latitude"]
        )
        loc_dist_list.append({
            "location_name": curr_loc["location_name"],
            "distance": dist
        })
    
    # 距离排序
    sorted_dist = pd.DataFrame(loc_dist_list).sort_values(
        by = "distance", 
        ascending = True, 
        na_position = "first"
    ).reset_index(drop = True)
    
    # 拼接单成员结果加入总列表
    final_result.append({
        "member_id": member_id,
        "location_1": sorted_dist.loc[0, "location_name"],
        "distance_1": sorted_dist.loc[0, "distance"],
        "location_2": sorted_dist.loc[1, "location_name"],
        "distance_2": sorted_dist.loc[1, "distance"],
        "location_3": sorted_dist.loc[2, "location_name"],
        "distance_3": sorted_dist.loc[2, "distance"]
    })

# 生成最终总表
final_df = pd.DataFrame(final_result)

如果后续数据量变大,可以用笛卡尔积(cross join)批量计算所有成员和地点的距离,替代嵌套循环提升运行效率,当前3个成员3个地点的场景下上述代码性能足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 11:15:03