我有一个包含多个列的数据集,我希望对其进行一次热编码。但是,我不想为每个编码都有编码,因为所说的列与所说的项目有关。我想要的是一组使用所有列的虚拟变量。请参阅我的代码以获得更好的解释。
假设我的数据框如下所示:
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_A和ch1_C,我只希望有一组(A,B,等等)与值1时任何在列中的值的ch1,ch2,ch3显示出来。
ch1_A
ch1_C
A
B
1
ch1
ch2
ch3
需要说明的是,在我的原始数据集中,单行不会多次包含相同的值(A,B,C …);它只会出现在其中一列上。
使用stack和str.get_dummies
stack
str.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