如何使用熊猫参考一个值创建虚拟变量?

lee*_*lin 5 python dataframe pandas dummy-variable

test = {'ngrp' : ['Manhattan', 'Brooklyn', 'Queens', 'Staten Island', 'Bronx']}
test = pd.DataFrame(test)
dummy = pd.get_dummies(test['ngrp'], drop_first = True)
Run Code Online (Sandbox Code Playgroud)

这给了我:

   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
Run Code Online (Sandbox Code Playgroud)

我将获得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
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 2

get_dummies对您的值进行排序(按字典顺序),然​​后创建虚拟值。这就是为什么您在最初的结果中看不到“Bronx”;这是因为它是列中第一个排序的值,所以它首先被删除。

为了避免您看到的行为,请强制执行基于“首次看到”的排序(即,将其转换为有序分类)。

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
Run Code Online (Sandbox Code Playgroud)

当然,这会产生副作用,即返回带有分类列名称的虚拟值作为结果,但这几乎从来都不是问题。