Skip to main content
 首页 » 编程设计

python之Pandas:将多个变量转换为一组虚拟变量

2025年05月04日15jirigala

我有一个包含类别(A、B、C、D)的列,我想将其转换为虚拟变量。问题是,此列每行可以包含多个类别,如下所示:

DF = pd.DataFrame({'Col':['A', 'A, B', 'A, C', 'B, C, D', 'D']}) 
 
    Col 
0   A 
1   A, B 
2   A, C 
3   B, C, D 
4   D 

此时我的想法是首先使用“,”作为分隔符将变量拆分为多个字段,然后对结果进行虚拟编码。像这样:

DF2 = DF['Col'].str.split(', ', expand = True) 
 
    0   1     2 
0   A   None  None 
1   A   B     None 
2   A   C     None 
3   B   C     D 
4   D   None  None 
 
pd.get_dummies(DF2) 
 
    0_A 0_B 0_D 1_B 1_C 2_D 
0   1   0   0   0   0   0 
1   1   0   0   1   0   0 
2   1   0   0   0   1   0 
3   0   1   0   0   1   1 
4   0   0   1   0   0   0 

最后,在列之间运行某种循环,为 A、B、C 和 D 创建一组虚拟变量。这可行,但对于更多的变量/类别会变得非常乏味。有没有更简单的方法来实现这一点?

请您参考如下方法:

最简单的方法是

DF.Col.str.get_dummies(', ') 
 
   A  B  C  D 
0  1  0  0  0 
1  1  1  0  0 
2  1  0  1  0 
3  0  1  1  1 
4  0  0  0  1 

稍微复杂一些

from sklearn.preprocessing import MultiLabelBinarizer 
from numpy.core.defchararray import split 
 
mlb = MultiLabelBinarizer() 
s = DF.Col.values.astype(str) 
d = mlb.fit_transform(split(s, ', ')) 
 
pd.DataFrame(d, columns=mlb.classes_) 
 
   A  B  C  D 
0  1  0  0  0 
1  1  1  0  0 
2  1  0  1  0 
3  0  1  1  1 
4  0  0  0  1