需要帮助创建一个 pseudo-dummy 变量,而不是 '1' 使用另一列的值

Need help creating a pseudo-dummy variable that instead of '1' uses the value from another column

我有一个如下所示的数据框:

A     B    C

34    x    a
3     y    b
23    y    a
40    x    b

本质上,列 B 和 C 需要成为虚拟变量,headers B_x、B_y、C_a、C_b。该函数几乎与 get_dummies() 在 pandas 中的工作方式完全相同,但有一个主要区别:对于在值为 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 分钟)。

使用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)