Pandas:基于元组字典创建分层列结构的DataFrame
解决方案
Python/Pandas 高效实现(无冗余副本)
直接从原始字典构造长格式数据,避免concat这类会生成副本的操作,再通过透视转换为目标结构:
1. 构造长格式数据
把字典的元组键和问题列表拆解为包含项目名、版本、问题的行数据:
import pandas as pd # 示例数据 sample_data = { ("XBOX360", "v1.0"): ["问题1", "问题2"], ("XBOX360", "v2.0"): ["问题3"], ("PS5", "v1.0"): ["问题4", "问题5", "问题6"], ("PC", "v1.0"): ["问题7"], ("PC", "v2.0"): ["问题8", "问题9"] } # 直接生成行列表,无中间副本 rows = [] for (proj, ver), issues in sample_data.items(): for issue in issues: rows.append({"project": proj, "target_version": ver, "issue": issue}) df_long = pd.DataFrame(rows)
2. 转换为3列目标结构
通过分组生成行号,再透视得到按项目分栏的格式:
# 为每个项目的问题生成连续行号 df_long["row_id"] = df_long.groupby("project").cumcount() # 透视成目标结构:项目为列,行号为索引,问题为值 df_target = df_long.pivot(index="row_id", columns="project", values="issue") # 可选:简化结构,去掉索引和列层级 df_target = df_target.reset_index(drop=True) df_target.columns.name = None
最终df_target就是3列(XBOX360、PS5、PC)的结构,每个项目列下堆叠对应所有版本的问题,空值自动填充NaN,直接用df_target.to_excel()即可导出。这种方式全程基于原始数据构造,无多余副本,性能开销极低。
Excel 手动操作方案
不想用代码的话,可通过Excel的Power Query工具完成转换:
- 导入数据:把字典导出为Excel(或直接粘贴元组列名和问题列表),确保每列对应一个
(project_name, target_version)元组,列内是问题内容。 - 拆分列名:选中所有列名,用「数据」选项卡的「文本分列」,按括号/逗号拆分出项目名,存为辅助列。
- 逆透视转长格式:选中所有问题列,进入Power Query编辑器,选择「转换」→「逆透视列」→「逆透视其他列」,得到包含「项目名」「版本」「问题」的长表。
- 透视回目标结构:添加「索引列」(从0开始),再选择「转换」→「透视列」,设置「值列」为「问题」、「列名」为「项目名」,生成3列结构后加载回Excel。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

