如何将自定义嵌套字典转换为交叉表样式的pandas DataFrame
实现方案
核心逻辑
你构建的context字典本身已经存好了所有需要的结构化信息,不需要重复计算原始布尔表,直接基于现有字典数据转换即可:
- 行索引:取
context['self']下的所有键值(即所有定义的对象:ac、anz、ana、aa等) - 列名:取
context['attrs']下的所有属性缩写 - 单元格值:对每一个对象,遍历所有属性,判断该属性是否存在于对象对应的属性集合中,生成布尔值
可直接运行的代码
import pandas as pd # 从已有的context字典读取数据 obj_list = list(context['self'].keys()) attr_list = list(context['attrs']) # 构造DataFrame的二维数据 data = [] for obj in obj_list: # 对每个对象,逐属性判断是否存在于其属性集合中 row = [attr in context['self'][obj] for attr in attr_list] data.append(row) # 生成最终DataFrame df = pd.DataFrame( data=data, index=obj_list, columns=attr_list )
缩写全称替换
如果需要把列名的缩写替换为对应全称,可以提前定义映射关系,直接对列名做批量替换,不影响原数据结构:
# 自定义你的缩写映射规则,按需补充即可 attr_fullname_map = { 'LA': '拉丁美洲', 'E': '欧洲', 'Can': '加拿大', 'AP': '亚太', 'ME': '中东', 'A': '非洲', 'M': '墨西哥', 'Car': '加勒比', 'US': '美国' } # 批量替换列名 df.columns = df.columns.map(attr_fullname_map)
输出说明
生成的表格结构完全匹配你需要的样式:行维度为所有定义的对象,列维度为所有属性,单元格布尔值直接标记对象与属性的匹配关系,后续可直接基于该DataFrame生成带勾选标记的可视化报表。
不需要重复解析原始
table参数,直接基于已构建的context结构转换,可避免冗余计算,也能保证数据和你的业务逻辑完全对齐。
内容的提问来源于stack exchange,提问作者french_fries
相关产品推荐
相关产品推荐

