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