【问题标题】:How to create dummy variables using pandas with reference to one value?如何使用 pandas 参考一个值创建虚拟变量?
【发布时间】:2026-01-13 14:30:01
【问题描述】:
test = {'ngrp' : ['Manhattan', '*lyn', 'Queens', 'Staten Island', 'Bronx']}
test = pd.DataFrame(test)
dummy = pd.get_dummies(test['ngrp'], drop_first = True)

这给了我:

   *lyn  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 作为我的参考水平(因为那会被丢弃),我如何更改它以指定曼哈顿应该是我的参考水平?我的预期输出是

   *lyn  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

【问题讨论】:

  • “参考水平”是什么意思,预期的输出是什么?

标签: python pandas dataframe dummy-variable


【解决方案1】:

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

为避免您看到的行为,请强制以“先见”为基础进行排序(即将其转换为有序分类)。

pd.get_dummies(
    pd.Categorical(test['ngrp'], categories=test['ngrp'].unique(), ordered=True), 
    drop_first=True)                                       

   *lyn  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

当然,这样做的副作用是返回带有分类列名的假人,但这几乎从来都不是问题。

【讨论】:

  • 如果我想选择一个特定的类别,例如史坦顿岛,该怎么办?那么它就不再是“第一次看到”了。
  • @leecolin 您的问题并不表明这可能是一种可能的情况?这仍然有效,您只需根据需要将参数更改为类别。
最近更新 更多