首页 > 解决方案 > 多列上的 Pandas get_dummies

问题描述

我有一个包含多个列的数据集,我希望对其进行一次热编码。但是,我不想对它们中的每一个都进行编码,因为所述列与所述项目相关。我想要的是一组使用所有列的虚拟变量。请参阅我的代码以获得更好的解释。

假设我的数据框如下所示:

In [103]: dum = pd.DataFrame({'ch1': ['A', 'C', 'A'], 'ch2': ['B', 'G', 'F'], 'ch3': ['C', 'D', 'E']})

In [104]: dum
Out[104]:
 ch1 ch2 ch3
0   A   B   C
1   C   G   D
2   A   F   E

如果我执行

pd.get_dummies(dum)

输出将是

   ch1_A  ch1_C  ch2_B  ch2_F  ch2_G  ch3_C  ch3_D  ch3_E
 0      1      0      1      0      0      1      0      0
 1      0      1      0      0      1      0      1      0
 2      1      0      0      1      0      0      0      1

但是,我想获得的是这样的:

 A B C D E F G
 1 1 1 0 0 0 0
 0 0 1 1 0 0 1
 1 0 0 0 1 1 0

我不希望有多个表示编码的列,例如ch1_Aand ch1_C,我只希望在列, ,中的任何值出现时有一组( A, B, 等等)具有值。1ch1ch2ch3

为了澄清,在我的原始数据集中,单行不会多次包含相同的值(A,B,C ...);它只会出现在其中一列上。

标签: pythonpandas

解决方案


使用stackstr.get_dummies

dum.stack().str.get_dummies().sum(level=0)
Out[938]: 
   A  B  C  D  E  F  G
0  1  1  1  0  0  0  0
1  0  0  1  1  0  0  1
2  1  0  0  0  1  1  0

推荐阅读