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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:55:22