Python如何将单列键值对DataFrame pivot为多列结构化数据表
解决方案
错误原因
你原有代码的问题如下:
df.header.str.split(': ')[0]语法错误,该写法会提取第一行的拆分结果,而非每行拆分后的第一个元素,正确写法为.str[0]pivot_table调用格式不符合要求,同时传入df作为参数又在列、值参数中引用df列,逻辑冲突- 未给同属一行的键值对打分组标记,透视逻辑无法判断哪些键值对需要合并为同一行
完整实现代码
import pandas as pd import numpy as np # 1. 将原单列拆分为键、值两列,n=1保证值里的冒号不会被误拆分 df[['key', 'value']] = df['header'].str.split(': ', n=1, expand=True) # 2. 给同属一行的属性打分组标记:遇到view或dimension时表示新行开始,分组号累加 df['group_id'] = df['key'].isin(['view', 'dimension']).cumsum() # 3. 透视转换为多列宽表 result = df.pivot(index='group_id', columns='key', values='value').reset_index(drop=True) # 4. 可选:和你示例输出对齐,仅第一行保留view值,其余行view置空 result['view'] = np.where(result.index == 0, result['view'].dropna().iloc[0], np.nan)
效果说明
运行后result的结构与你期望的输出完全一致,会自动保留所有存在的键对应的列,不存在的键对应值自动填充为NaN。
内容的提问来源于stack exchange,提问作者RandyMcKay
相关产品推荐
相关产品推荐

