从熊猫系列高效创建多个口罩

时间:2018-09-07 18:30:25

标签: python pandas

给出一个看起来像这样的系列:

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

3 个答案:

答案 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