为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条目与所属的经纬度绑定,导致分组逻辑失效。
修正步骤如下:
正确解析嵌套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']] )简化列名(可选但推荐)
原列名过长,可简化方便后续操作:df.rename(columns={ 'context.geo_bounds.circle.center.latitude': 'lat', 'context.geo_bounds.circle.center.longitude': 'lon' }, inplace=True)生成分组ID
用简化后的列名分组生成ID,确保同经纬度的结果ID一致:df['ID'] = df.groupby(['lat', 'lon']).ngroup() + 1按需筛选列
如果只需要预期的ID、name、rating列,可做筛选:df_final = df[['ID', 'name', 'rating']].reset_index(drop=True)
验证逻辑
运行修正后的代码后,同一经纬度对应的所有results条目会被分配相同的ID,不同经纬度则分配递增的ID,完全匹配你预期的DataFrame格式。
内容的提问来源于stack exchange,提问作者Abdullah G
相关产品推荐
相关产品推荐

