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

如何在Pandas中重塑含重复行的混合数据(无需聚合)

Pandas DataFrame重塑:将Keys列唯一值转为列并展开嵌套列表

核心解决思路

你的场景是每个race_id对应一组完整键值对(24条记录对应23列,含嵌套列表类型的runners字段),无需聚合操作,只需将每组内的Keys转为列、Values填充对应单元格,最后展开runners的嵌套数据。

分步实现代码

  1. 按race_id分组转置,避免聚合NaN
    利用groupby按race_id拆分数据块,每个块内执行pivot转置(同一块内Keys唯一,无需聚合):

    # 按race_id分组,每个组内将Keys转为列,Values填充对应值
    df_pivoted = df.groupby('race_id').apply(
        lambda group: group.pivot(index=None, columns='Keys', values='Values').iloc[0]
    ).reset_index()
    

    这里iloc[0]直接提取组内转置后的唯一有效行,不会产生聚合导致的NaN。

  2. 展开runners列的嵌套列表
    若runners是字典组成的列表,先展开列表为多行,再将字典拆分为独立列:

    from pandas import json_normalize
    
    # 展开嵌套列表为多行
    df_exploded = df_pivoted.explode('runners', ignore_index=True)
    # 将runners中的字典拆分为单独列,合并到原DataFrame
    df_final = pd.concat([df_exploded.drop('runners', axis=1), json_normalize(df_exploded['runners'])], axis=1)
    

为什么pivot_table不适用?

pivot_table的核心是聚合,当同一index+columns组合下存在多个值时,会用指定aggfunc处理。但你的数据按race_id分块,同一块内Keys唯一,无需聚合,groupby+apply+pivot的方式可直接生成无NaN的结构化数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:30:48