需要帮助来创建伪虚拟变量,该变量使用另一列中的值代替“ 1”

时间:2019-03-27 01:58:10

标签: python pandas dummy-variable dummy-data

我有一个看起来像这样的数据框:

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分钟)。

1 个答案:

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