给出一个看起来像这样的系列:
0 foo
1 bar
2 foo
3 foo
4 bar
5 baz
如何创建一个数据框,其中每一列都是该系列中唯一值的掩码?在此示例中,它看起来像:
foo bar baz
0 True False False
1 False True False
2 True False False
3 True False False
4 False True False
5 False False True
答案 0 :(得分:4)
使用get_dummies
s.str.get_dummies().astype(bool)
Out[392]:
bar baz foo
0 False False True
1 True False False
2 False False True
3 False False True
4 True False False
5 False True False
或者我们尝试一些新的crosstab
pd.crosstab(s.index,s).astype(bool)
Out[395]:
a bar baz foo
row_0
0 False False True
1 True False False
2 False False True
3 False False True
4 True False False
5 False True False
答案 1 :(得分:2)
这里是Pipfile
-
array-initialization
样品运行-
def series_hotencode(s):
a,b = s.factorize()
ar = np.zeros((len(a),len(b)), dtype=bool)
ar[np.arange(len(a)),a] = 1
return pd.DataFrame(ar,columns=b)
答案 2 :(得分:2)
让我们尝试pd.factorize
+ np.eye
以获得快速,简洁的解决方案。
x,y = pd.factorize(s)
pd.DataFrame(np.eye(len(y), dtype=bool)[x], columns=y)
foo bar baz
0 True False False
1 False True False
2 True False False
3 True False False
4 False True False
5 False False True