考虑以下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