代码之家  ›  专栏  ›  技术社区  ›  Jake Morris

从熊猫系列高效创建多个面具

  •  3
  • Jake Morris  · 技术社区  · 7 年前

    给出了一个看起来像:

    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 回复  |  直到 7 年前
        1
  •  4
  •   BENY    7 年前

    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
    
        2
  •  2
  •   Divakar    7 年前

    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)
    

    样品运行-

    In [40]: s
    Out[40]: 
    0    foo
    1    bar
    2    foo
    3    foo
    4    bar
    5    baz
    Name: 1, dtype: object
    
    In [41]: series_hotencode(s)
    Out[41]: 
         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
  •  2
  •   cs95 abhishek58g    7 年前

    让我们试试 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