出现在多列中的单词的一次性编码

One-hot encoding for words which occur in multiple columns

我想根据分类数据创建热编码数据,您可以在此处查看。

        Label1          Label2        Label3  
0   Street fashion        Clothing       Fashion
1         Clothing       Outerwear         Jeans
2     Architecture        Property      Clothing
3         Clothing           Black      Footwear
4            White      Photograph        Beauty

问题(对我来说)是一个特定的标签(例如衣服)可以在标签 1、标签 2 或标签 3 中。我试过 pd.get_dummies 但创建的数据如下:

Label1_Clothing  Label2_Clothing    Label3_Clothing  
0      0                 1                 0
1      1                 0                 0
2      0                 0                 1

有没有办法让每个标签只有一个虚拟变量列?所以更确切地说:

Label_Clothing  Label_Street Fashion    Label_Architecture  
0      1                 1                 0
1      1                 0                 0
2      1                 0                 1

我对编程还很陌生,很高兴能得到你的帮助。

最好的, 贝尔纳多

您可以将您的数据框堆叠成一个 Series,然后从中获取假人。从那里,您可以利用外部层的最大值将数据折叠回其原始形状,同时保持标签的位置:

dummies = pd.get_dummies(df.stack()).max(level=0)

print(dummies)
   Architecture  Beauty  Black  Clothing  Fashion  Footwear  Jeans  Outerwear  Photograph  Property  Street fashion  White
0             0       0      0         1        1         0      0          0           0         0               1      0
1             0       0      0         1        0         0      1          1           0         0               0      0
2             1       0      0         1        0         0      0          0           0         1               0      0
3             0       0      1         1        0         1      0          0           0         0               0      0
4             0       1      0         0        0         0      0          0           1         0               0      1