You need to enable JavaScript to run this app. 如何从嵌套字典高效生成目标分组DataFrame,无需手动构造初始表?
优惠活动
大模型
产品
解决方案
定价
更多

如何从嵌套字典高效生成目标分组DataFrame,无需手动构造初始表?

从嵌套字典构建分组编码DataFrame的高效方案

你可以直接使用pandas内置的结构化数据处理接口跳过手动构造初始DataFrame的步骤,两种常用实现方式如下:


方案1:一行代码转换(最简洁)

import pandas as pd

encoding_dict = {"Age":{"Middle": 0,
                        "Senior": 1,
                        "Young": 2},
                 "Sex":{"F": 0,
                        "M": 1},
                 "BP":{"High": 0,
                       "Low": 1,
                       "Normal": 2},
                 "Cholesterol":{"High": 0,
                                "Normal": 1}}

# 核心转换逻辑,输出和你原代码完全一致的结果
grouped = pd.DataFrame(encoding_dict).stack().swaplevel().sort_index().to_frame(name='Encoding')
print(grouped)

逻辑说明

  • pd.DataFrame(encoding_dict) 直接将嵌套字典转为DataFrame,行索引为全部分类值,列名为特征名,不存在的分类对应值为NaN
  • .stack() 将列名(特征名)转为二级行索引,同时自动过滤空值,天然适配不同特征分类数量不一致的场景
  • .swaplevel() 交换两层索引顺序,将特征名放在第一层索引,匹配目标输出的索引结构
  • .sort_index() 对多层索引排序,最终顺序和你手动构造的输出完全一致
  • .to_frame(name='Encoding') 将生成的Series转为DataFrame,指定编码列名

方案2:concat拼接(逻辑更直观)

如果你更偏向容易理解的实现逻辑,可以用pd.concat批量拼接每个特征的编码映射:

# 核心转换逻辑
grouped = pd.concat({feature: pd.Series(category_map) for feature, category_map in encoding_dict.items()}).to_frame(name='Encoding')
# 给两层索引命名
grouped.index.names = ['Features', 'Categories']
print(grouped)

逻辑说明

通过字典推导式把每个特征的分类编码字典转为Series,再用pd.concat的keys参数给每个特征的Series添加一级索引,直接生成符合要求的多层索引结构。


两种方案都是pandas原生向量化操作,不需要手动拼接任何列表,后续如果特征或分类有增删,不需要修改转换逻辑,自动适配新的映射关系,运行效率远高于手动构造后再分组的方案。

内容的提问来源于stack exchange,提问作者Girish Kumar Chandora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 02:24:03