当一行属于多个类别时,如何创建虚拟变量?

时间:2019-03-30 19:52:15

标签: python pandas

考虑以下df:

df = pd.DataFrame({'id' : np.arange(5),
              'cat': ['a|b|c','a|c', 'c|d','e|a|c', 'b|a']
             })

我的目标是在不使用for循环的情况下获取所有猫的虚拟变量。低于预期结果:

    id  cat     cat_a   cat_b   cat_c   cat_d   cat_e
0   0   a|b|c   1.0     1.0     1.0     0.0     0.0
1   1   a|c     1.0     0.0     1.0     0.0     0.0
2   2   c|d     0.0     0.0     1.0     1.0     0.0
3   3   e|a|c   1.0     0.0     1.0     0.0     1.0
4   4   b|a     1.0     1.0     0.0     0.0     0.0

注意:以下代码可产生所需的结果,但使用df.itertuples()

cats = ['a','b','c','d','e']
zero_matrix = pd.DataFrame(np.zeros((len(df), len(cats))), columns=cats)

for idx,*_,c in df.itertuples():
    cat_idx = zero_matrix.columns.get_indexer(c.split('|'))
    zero_matrix.iloc[idx, cat_idx ] = 1

df.join(zero_matrix.add_prefix('cat_'))   

熊猫0.23.4

Python 3.7

0 个答案:

没有答案