Pandas如何将指定列行值转为表头重构DataFrame
问题原因
之前两种方法失效的核心原因有两个:
values列存储的是[{'value': 数值}]格式的嵌套结构,不是可直接用于表转换的标量值- 调用
pivot时未指定索引、取值参数,直接转置时没有做指标名到列名的映射,无法生成符合要求的列结构
正确实现代码
直接按以下步骤处理即可,最终输出你要的单行宽表,自动过滤全空的title、description列:
import pandas as pd # 1. 先从嵌套的values列中提取实际指标值,转为标量 df_list['actual_value'] = df_list['values'].apply(lambda item: item[0]['value']) # 2. 透视生成宽表,固定保留id、period列,name列值转为新列名 df_result = df_list.pivot( index=['id', 'period'], columns='name', values='actual_value' ).reset_index() # 3. 清除列索引残留的名称(可选,优化输出格式) df_result.columns.name = None
结果说明
处理后得到的df_result结构如下:
- 固定包含
id、period两列,取值和原表一致 - 原
name列的每一个唯一指标名(比如total_video_followers、total_video_followers_unique)都会成为独立列,对应列值就是原行中values存储的指标数值 - 全为空值的title、description列不会出现在结果中
- 若后续原表存在多组不同id/period的数据,该代码也能兼容,自动按id+period维度生成对应行的宽表结果
内容的提问来源于stack exchange,提问作者KristiLuna
相关产品推荐
相关产品推荐

