我有下表
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编码器,因为可以有多个值。我如何实现这一目标?
答案 0 :(得分:2)
我认为只需要2列str.get_dummies
加join
并且最后一次转换为布尔值:
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