如何将DataFrame嵌套route列展开并映射对应id?
输入表格
输入的DataFrame包含四列:id、route、provider、zipcode
id为唯一值route是随时间更新的司机位置数据,格式示例:
[{'latitude': '40.45591', 'longitude': '-79.94219', 'updatedAt': 1667735101102}, {'latitude': '40.47023', 'longitude': '-79.92902', 'updatedAt': 1667738498659}, {'latitude': '40.47023', 'longitude': '-79.92902', 'updatedAt': 1667738661292}, {'latitude': '40.47023', 'longitude': '-79.92902', 'updatedAt': 1667738796658}, {'latitude': '40.47023', 'longitude': '-79.92902', 'updatedAt': 1667738918577}, {'latitude': '40.47021243896656', 'longitude': '-79.92899329804723', 'updatedAt': 1667738992677}]
需求
将每个route中的latitude、longitude、updatedAt条目与对应的id进行映射关联,得到目标输出格式。
已有单条数据处理代码
x=df.iloc[0]['ROUTE'] y=df.iloc[0]['_ID'] k=pd.DataFrame(x) k['orderid']=y
批量处理实现方案
方法1:explode+json_normalize(高效推荐)
如果route列是已解析的Python列表,直接拆分展开:
import pandas as pd # 将每个route列表拆分为单独行 df_exploded = df.explode('route', ignore_index=True) # 展开字典为独立列 result = pd.json_normalize(df_exploded['route']) # 关联对应id result['orderid'] = df_exploded['id']
若route列是字符串格式的列表/字典,需先转换为Python对象:
import ast import pandas as pd # 解析字符串为列表对象 df['route'] = df['route'].apply(ast.literal_eval) # 执行拆分与展开 df_exploded = df.explode('route', ignore_index=True) result = pd.json_normalize(df_exploded['route']) result['orderid'] = df_exploded['id']
方法2:apply循环处理
若偏好逐行处理的逻辑,可通过apply生成子DataFrame后合并:
import pandas as pd def process_single_row(row): route_df = pd.DataFrame(row['route']) route_df['orderid'] = row['id'] return route_df # 合并所有行生成的子DataFrame result = pd.concat(df.apply(process_single_row, axis=1).tolist(), ignore_index=True)
两种方法均可实现批量需求,方法1的执行效率更高,适合大数据量场景。
内容的提问来源于stack exchange,提问作者lifo
相关产品推荐
相关产品推荐

