如何在Pandas中重塑含重复行的混合数据(无需聚合)
Pandas DataFrame重塑:将Keys列唯一值转为列并展开嵌套列表
核心解决思路
你的场景是每个race_id对应一组完整键值对(24条记录对应23列,含嵌套列表类型的runners字段),无需聚合操作,只需将每组内的Keys转为列、Values填充对应单元格,最后展开runners的嵌套数据。
分步实现代码
按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。展开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
相关产品推荐
相关产品推荐

