我有一个看起来像这样的数据框:
A B C
34 x a
3 y b
23 y a
40 x b
从本质上讲,cols B和C必须成为带有标题B_x,B_y,C_a,C_b的伪变量。该函数几乎与get_dummies()在熊猫中的工作方式完全相同,但有一个主要区别:对于所有创建的虚拟变量(其中的值为1),我需要将该值设为A列中的值。
A B_x B_y C_a C_b
34 34 0 34 0
3 0 3 0 3
23 0 23 23 0
40 40 0 0 40
我正在处理具有大量类别的相当大的数据。
我尝试在数据集上使用get_dummies(),然后使用df.mask将所有1更改为df.A,但这非常慢(大约10分钟)。
答案 0 :(得分:1)
使用pd.get_dummies
并广播列A
df2 = pd.get_dummies(df[['B', 'C']]) * df.A.values.reshape([-1,1])
B_x B_y C_a C_b
0 34 0 34 0
1 0 3 0 3
2 0 23 23 0
3 40 0 0 40
要分配回A
,有很多选择。可以做df2['A'] = df['A']
或使用pd.concat
pd.concat([df.A, df2], axis=1)