多标签分类的输入数据创建

Input data creation for Multilabel classification

我正在研究多标签分类问题。 X 中的每个值都是分类值。原始数据如下

ID  X1  X2  X3  Y
111 AA  LL  KK  MMM
111 AA  LL  KK  MMM
111 BB  LL  jj  NNN
121 HH  DD  uu  III
121 HH  DD  yy  OOO
121 HH  LL  aa  PPP

我正在尝试将其转换为一个数据框,其中列(X1、X2、X3、Y)中存在的每个唯一值都将成为一个新列,并且每个 ID 都将有一个记录。我试图获得的预期输出是

ID  X1_AA   X1_BB   X1_HH   X2_LL   X2_DD   X3_KK   X3_jj   X3_uu   X3_yy   x3_aa   Y_MMM   Y_NNN   Y_III   Y_OOO   Y_PPP
111 1   1   0   1   0   1   1   0   0   0   1   1   0   0   0
121 0   0   1   1   1   0   0   1   1   1   0   0   1   1   1

我尝试使用 pandas get_dummies,它正在创建虚拟列,但 ID 是重复的。这里 Y 是我的目标列。一个ID的多个Y值表示ID访问了多个频道。

另外请建议我是否可以通过在分类中为 X 和 Y 创建虚拟列来直接使用原始数据

new_df = pd.get_dummies(df).groupby('ID').sum()
new_df[new_df > 1] = 1

ID  X1_AA   X1_BB   X1_HH   X2_DD   X2_LL   X3_KK   X3_aa   X3_jj   X3_uu   X3_yy   Y_III   Y_MMM   Y_NNN   Y_OOO   Y_PPP
111 1   1   0   0   1   1   0   1   0   0   0   1   1   0   0
121 0   0   1   1   1   0   1   0   1   1   1   0   0   1   1

编辑:我不知道 groupby 中的 .max() 方法。 @jezrael 的回答肯定更好。

对于输出中的假人来说,聚合是必要的max:

df1 = pd.get_dummies(df).groupby('ID', as_index=False).max()
print (df1)
    ID  X1_AA  X1_BB  X1_HH  X2_DD  X2_LL  X3_KK  X3_aa  X3_jj  X3_uu  X3_yy  \
0  111      1      1      0      0      1      1      0      1      0      0   
1  121      0      0      1      1      1      0      1      0      1      1   

   Y_III  Y_MMM  Y_NNN  Y_OOO  Y_PPP  
0      0      1      1      0      0  
1      1      0      0      1      1