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

如何将JSON多维数组转为Pandas独立列(嵌套状态数据处理)

解决方案:将嵌套状态数组转为独立列并计算耗时

核心思路

先把嵌套的status数组拆分为每行对应一个状态记录,再通过透视表将状态转为独立列,最后合并回原数据并计算耗时。

具体步骤(假设status数组元素为含status和timestamp字段的字典)

  1. 展开嵌套数组
    将每个订单的status数组拆分为多行,保留订单唯一标识(如orderid):

    # 展开status数组,每个状态占一行,重置索引避免混乱
    expanded_df = df.explode('status').reset_index(drop=True)
    
  2. 解析状态字典
    把status字段里的嵌套字典拆成单独的status_name和timestamp列:

    # 将字典转为DataFrame并合并到原表
    status_details = pd.DataFrame(expanded_df['status'].tolist(), index=expanded_df.index)
    expanded_df = pd.concat([expanded_df.drop('status', axis=1), status_details], axis=1)
    # 重命名列(如果原字典键名不是status/timestamp,替换为实际键名)
    expanded_df.rename(columns={'status': 'status_name'}, inplace=True)
    
  3. 透视生成独立状态列
    以orderid为行索引,将不同状态转为列,对应值为状态时间戳:

    # 透视表:每个orderid一行,每个状态对应一列
    status_pivot = expanded_df.pivot(
        index='orderid',
        columns='status_name',
        values='timestamp'
    ).reset_index()
    
  4. 合并回原数据并计算耗时
    合并原表的其他字段(去重后),并转换时间格式计算耗时:

    # 保留原表每个orderid的唯一行,合并状态列
    final_df = df.drop_duplicates('orderid').merge(status_pivot, on='orderid')
    
    # 转换时间戳为datetime类型
    final_df['order confirmed'] = pd.to_datetime(final_df['order confirmed'])
    final_df['pick up confirmed'] = pd.to_datetime(final_df['pick up confirmed'])
    
    # 计算从订单确认到取件确认的耗时(单位:小时,可按需改为分钟/秒)
    final_df['confirm_to_pickup_hours'] = (
        final_df['pick up confirmed'] - final_df['order confirmed']
    ).dt.total_seconds() / 3600
    

特殊情况处理

  • 如果部分订单缺少目标状态(如无pick up confirmed记录),结果会出现NaN,可通过fillna()标记或过滤:
    # 标记缺失状态的订单
    final_df['confirm_to_pickup_hours'] = final_df['confirm_to_pickup_hours'].fillna('未完成取件')
    
  • 如果status数组的结构不同(如键名不是status/timestamp),只需替换代码中对应的列名即可。

内容的提问来源于stack exchange,提问作者nitin bhatt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:36:04