并非所有类别都存在时的虚拟变量


问题内容

我有一组数据框,其中的一列包含分类变量。我想将其转换为几个虚拟变量,在这种情况下,我通常会使用get_dummies

发生的情况是get_dummies查看每个数据框中的可用数据以找出有多少类别,从而创建适当数量的虚拟变量。但是,在我现在正在解决的问题中,我实际上实际上预先知道了可能的类别。但是,当单独查看每个数据框时,不一定会出现所有类别。

我的问题是:是否有一种方法可以传递get_dummies(或等效功能)类别名称,以便对于未出现在给定数据框中的类别,仅创建一个0列?

可能导致的结果:

categories = ['a', 'b', 'c']

   cat
1   a
2   b
3   a

成为这个:

  cat_a  cat_b  cat_c
1   1      0      0
2   0      1      0
3   1      0      0

问题答案:

使用转置和重新索引

import pandas as pd

cats = ['a', 'b', 'c']
df = pd.DataFrame({'cat': ['a', 'b', 'a']})

dummies = pd.get_dummies(df, prefix='', prefix_sep='')
dummies = dummies.T.reindex(cats).T.fillna(0)

print dummies

    a    b    c
0  1.0  0.0  0.0
1  0.0  1.0  0.0
2  1.0  0.0  0.0