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

为API响应结果生成经纬度分组ID的Pandas实现问题

问题解决:按经纬度分组为API结果生成ID

问题描述

需要为API返回的每条results数据生成ID,规则是按每条数据对应的context.geo_bounds.circle.center下的纬度(latitude)和经度(longitude)分组,同组的结果ID相同。但使用现有Pandas代码未得到预期效果,预期的DataFrame格式如下:

ID                            name  rating 
0    1      Leslieville Farmers Market     9.1   
1    1               Rorschach Brewing     8.7   
...
19   2      North Of Brooklyn Pizzeria     7.3  

排查与修正

你的代码问题大概率出在API响应的数据结构解析上。从你提供的API响应示例和代码来看,推测你的info是一个包含多个对象的列表,每个对象同时包含context(带经纬度)和对应的results数组。此时原代码的json_normalize参数无法正确将每个results条目与所属的经纬度绑定,导致分组逻辑失效。

修正步骤如下:

  1. 正确解析嵌套JSON结构
    使用json_normalize时,确保每个results条目能关联到对应的context经纬度。调整后的解析代码:

    # 假设info是包含多个{context:..., results:...}的列表
    df = pd.json_normalize(
        info,
        record_path='results',
        meta=[['context', 'geo_bounds', 'circle', 'center', 'latitude'],
              ['context', 'geo_bounds', 'circle', 'center', 'longitude']]
    )
    
  2. 简化列名(可选但推荐)
    原列名过长,可简化方便后续操作:

    df.rename(columns={
        'context.geo_bounds.circle.center.latitude': 'lat',
        'context.geo_bounds.circle.center.longitude': 'lon'
    }, inplace=True)
    
  3. 生成分组ID
    用简化后的列名分组生成ID,确保同经纬度的结果ID一致:

    df['ID'] = df.groupby(['lat', 'lon']).ngroup() + 1
    
  4. 按需筛选列
    如果只需要预期的ID、name、rating列,可做筛选:

    df_final = df[['ID', 'name', 'rating']].reset_index(drop=True)
    

验证逻辑

运行修正后的代码后,同一经纬度对应的所有results条目会被分配相同的ID,不同经纬度则分配递增的ID,完全匹配你预期的DataFrame格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:28:15