如何将多组类别集合转换为标记形式的DataFrame?
集合序列转二值标记结构化DataFrame实现
核心需求说明
将由多组类别构成的集合序列,转换为以全量出现类别为列的结构化DataFrame,每行通过1/0标记所属集合是否包含对应类别元素。
常用实现方案
方案1:Pandas内置方法快速实现
适合常规批量处理场景,代码简洁无需手写循环逻辑,借助pandas内置的展开、one-hot编码能力直接生成结果:
import pandas as pd # 待转换输入示例 A = [{'a', 'c'}, {'a', 'b'}, {'b', 'd'}, {'e'}] # 链式操作生成二值标记DataFrame result = pd.Series(A).explode().str.get_dummies().groupby(level=0).max() # 可选:调整行索引从1开始,匹配示例输出格式 result.index = result.index + 1
方案2:逐行判断的手动实现
灵活性更高,方便后续嵌入自定义判断规则,逻辑直观易维护:
import pandas as pd # 待转换输入示例 A = [{'a', 'c'}, {'a', 'b'}, {'b', 'd'}, {'e'}] # 提取全量不重复类别作为DataFrame列名 all_categories = sorted({cat for single_set in A for cat in single_set}) # 逐行生成二值标记矩阵 binary_matrix = [ [1 if cat in single_set else 0 for cat in all_categories] for single_set in A ] # 生成结构化DataFrame,设置行索引从1开始 result = pd.DataFrame(binary_matrix, columns=all_categories, index=range(1, len(A)+1))
最终输出效果
两种方案生成的结果完全一致,匹配参考示例要求:
a b c d e 1 1 0 1 0 0 2 1 1 0 0 0 3 0 1 0 1 0 4 0 0 0 0 1
内容的提问来源于stack exchange,提问作者Matheus Cândido
相关产品推荐
相关产品推荐

