test = {'ngrp' : ['Manhattan', 'Brooklyn', 'Queens', 'Staten Island', 'Bronx']}
test = pd.DataFrame(test)
dummy = pd.get_dummies(test['ngrp'], drop_first = True)
这给了我:
Brooklyn Manhattan Queens Staten Island
0 0 1 0 0
1 1 0 0 0
2 0 0 1 0
3 0 0 0 1
4 0 0 0 0
我将获得Bronx作为我的参考水平(因为那是被删除的东西),如何更改它以指定应该将曼哈顿作为我的参考水平?我的预期输出是
Brooklyn Queens Staten Island Bronx
0 0 0 0 0
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 1
最佳答案
get_dummies
(按字典顺序)对值进行排序,然后创建虚拟变量。这就是为什么您在初始结果中看不到“布朗克斯”的原因;这是因为它是您列中的第一个排序值,因此它被首先删除。
为避免出现您看到的行为,请强制执行顺序为“先看”(即,将其转换为有序类别)。
pd.get_dummies(
pd.Categorical(test['ngrp'], categories=test['ngrp'].unique(), ordered=True),
drop_first=True)
Brooklyn Queens Staten Island Bronx
0 0 0 0 0
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 1
当然,这样做的副作用是返回带有分类列名的虚拟变量,但这几乎不是问题。