首页 > 解决方案 > 每列中有多个分号分隔变量的 DataFrame。如何一键编码?

问题描述

我有一个 DataFrame,每列中有多个变量 - 这些数据类型是字符串而不是列表。我无法对每列中的数据进行 One-Hot Encode。

Out:

        A                     B                             C
Ella    Red; Blue; Yellow     Circle; Square; Triangle      Small; Medium; Extra big
Mike    Yellow; Red; Blue     Oval; Triangle; Circle        Medium; Big; Extra big
Dave    Yellow; Red; Green    Circle; Square; Triangle      Extra small; Medium; Big

我希望使用多层列标题创建它,如下所示:

       A                                 B                                     C
       Red    Blue   Green   Yellow      Circle   Triangle  Square   Oval      ....
Ella   1      1      0       1           1        1         1        0         ....
Mike   1      1      0       1           1        1         0        1         ....   
Dave   1      0      1       1           1        1         1        0         .... 

我试过了,它对我有帮助,但只有当所有列都具有相同的变量时才有效: https ://stackoverflow.com/a/67110743/15646168

df = df.stack().str.get_dummies(sep=',')
df.columns = df.columns.str.strip()
df = df.stack().groupby(level=[0,1,2]).sum().unstack(level=[1,2])

太感谢了!

标签: pythonpandasdataframeone-hot-encoding

解决方案


concat在 dict comprehseion 中使用- Series.str.get_dummiesonly 将分隔符更改为;

df = pd.concat({x: df[x].str.get_dummies(sep='; ') for x in df.columns}, axis=1)
print (df)
        A                       B                        C            \
     Blue Green Red Yellow Circle Oval Square Triangle Big Extra big   
Ella    1     0   1      1      1    0      1        1   0         1   
Mike    1     0   1      1      1    1      0        1   1         1   
Dave    0     1   1      1      1    0      1        1   1         0   

                               
     Extra small Medium Small  
Ella           0      1     1  
Mike           0      1     0  
Dave           1      1     0  

推荐阅读