如何以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
相关产品推荐
相关产品推荐

