You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以Pythonic方式将字典转换为稀疏矩阵形式的DataFrame

如何以Pythonic方式将字典转换为稀疏矩阵形式的DataFrame

嘿,我完全懂你想要的效果——把这些包含分组/元素的字典转换成一个类似独热编码的稀疏矩阵形式的DataFrame对吧?你当前的方法得到的是每行对应原列表元素、缺失值为None的结构,但目标是让所有元素作为列,用1标记存在、0标记不存在。这里有两种很Pythonic的实现方式:

方法一:纯Python+pandas实现(无需额外库)

这种方法用集合推导式和字典推导式来构建数据,逻辑清晰且不需要依赖其他库:

import pandas as pd

# 你的原始字典
aa = {"a": ["group_a", "group_b", "group_c"]}
ab = {"b": ["x", "y"]}
ba = {"c": ["group_b"]}

# 合并所有字典
combined_dict = {**aa, **ab, **ba}

# 收集所有唯一的列名(用集合去重,排序可选)
all_columns = sorted({item for sublist in combined_dict.values() for item in sublist})

# 为每个键生成对应的1/0列表
matrix_data = {
    key: [1 if col in values else 0 for col in all_columns]
    for key, values in combined_dict.items()
}

# 转换为DataFrame并调整结构
result_df = pd.DataFrame(matrix_data).T
result_df.columns = all_columns

print(result_df)

方法二:利用MultiLabelBinarizer(更简洁高效)

如果你已经在使用scikit-learn,MultiLabelBinarizer是专门处理这类多标签二值化的工具,代码会更简洁:

from sklearn.preprocessing import MultiLabelBinarizer
import pandas as pd

# 你的原始字典
aa = {"a": ["group_a", "group_b", "group_c"]}
ab = {"b": ["x", "y"]}
ba = {"c": ["group_b"]}

# 合并所有字典
combined_dict = {**aa, **ab, **ba}

# 初始化二值化工具并转换数据
mlb = MultiLabelBinarizer()
result_df = pd.DataFrame(
    mlb.fit_transform(combined_dict.values()),
    index=combined_dict.keys(),
    columns=mlb.classes_
)

print(result_df)

两种方法都会输出你想要的结果:

group_a  group_b  group_c  x  y
a            1        1        1  0  0
b            0        0        0  1  1
c            0        1        0  0  0

这两种方式都符合Python的简洁风格,第一种适合不想引入额外依赖的场景,第二种利用现成工具更高效,你可以根据自己的需求选择~

备注:内容来源于stack exchange,提问作者AndreasInfo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 13:38:00