熊猫 - 将分类数据分成列

时间:2018-05-27 11:46:31

标签: pandas categorical-data

我有下表

df = pandas.DataFrame({'foo': ['b', 'a,b', 'a,c', 'a,b,c'], 
                       'bar': ['X,Y', 'Z', 'Z,X', 'X,Y']})

我希望有一个包含列的表格,'''' c'' X',&#39 ; Y',' Z',带有False / True条目。

这不是1-hot编码器,因为可以有多个值。我如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

我认为只需要2列str.get_dummiesjoin并且最后一次转换为布尔值:

df = df['foo'].str.get_dummies(',').join(df['bar'].str.get_dummies(',')).astype(bool)
print (df)
       a      b      c      X      Y      Z
0  False   True  False   True   True  False
1   True   True  False  False  False   True
2   True  False   True   True  False   True
3   True   True   True   True   True  False

如果有多个列,则list comprehension df = pd.concat([df[x].str.get_dummies(',') for x in df.columns], axis=1).astype(bool) WITH RECURSIVE EXPL (parent_node, node, filename) AS ( SELECT ROOT.parent_node, ROOT.node, ROOT.filename FROM filesystem ROOT WHERE ROOT.parent_node = 1 UNION ALL SELECT CHILD.parent_node, CHILD.node, CHILD.filename FROM EXPL PARENT, filesystem CHILD WHERE PARENT.node = CHILD.parent_node ) SELECT DISTINCT parent_node, node, filename FROM EXPL ORDER BY parent_node, node; END 更通用的解决方案:

WHERE  ROOT.parent_node = 1