【问题标题】:How to generate dummy variables for only specific values in a column?如何仅为列中的特定值生成虚拟变量?
【发布时间】:2015-10-01 21:09:58
【问题描述】:

我有一个 pandas 数据框列,其中包含 100 个国家/地区的国家/地区代码。我想用这些来做回归,但我只想在我的数据集中为特定国家创建虚拟变量。

我认为这会起作用:

dummies = pd.get_dummies(df.CountryCode, prefix='cc_')
df_and_dummies = pd.concat([df,dummies[dummies['cc_US', 'cc_GB']]], axis=1)
df_and_dummies

但它给了我错误:

KeyError: ('cc_US', 'cc_GB')

我的数据框目前看起来像:

dframe = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
                'CountryCode': ['UK', 'US', 'RU']})
dframe

但我希望它看起来像这样:

是否有一种简单的方法可以指定您希望在 get_dummies 方法中包含哪些值,或者是否有其他方法可以识别特定的虚拟变量?

【问题讨论】:

  • 你想要dummies[dummies.isin(['cc_US', 'cc_GB', 'cc_DE'])]吗?否则,你能提供一个可重现的例子吗?
  • @joris 这似乎不起作用。我在帖子中添加了一个示例。感谢您的关注!

标签: python pandas dataframe dummy-variable


【解决方案1】:

假人是这样的:

In [25]: dummies
Out[25]:
   cc_RU  cc_UK  cc_US
0      0      1      0
1      0      0      1
2      1      0      0

要选择其中的某些列,您可以在 [] getitem 中提供列名列表:

In [27]: dummies[['cc_US', 'cc_UK']]
Out[27]:
   cc_US  cc_UK
0      0      1
1      1      0
2      0      0

所以你实际上错过了一个 [ 括号。
完整的代码就变成了:

In [29]: pd.concat([df, dummies[['cc_US', 'cc_UK']]], axis=1)
Out[29]:
   A  B CountryCode  cc_US  cc_UK
0  a  b          UK      0      1
1  b  a          US      1      0
2  a  c          RU      0      0

【讨论】:

  • 上面的第 27 行返回:KeyError: "['cc_US' 'cc_UK'] not in index" 为我。嗯。
  • 您检查是否使用了正确的列名? (例如,不带双下划线?如dummies = pd.get_dummies(dframe.CountryCode, prefix='cc') 与上面的示例数据框(不带下划线的前缀,自动添加))。
  • 额外的下划线是问题所在!我没有意识到prefix 会自动附加它。非常感谢您的帮助。
猜你喜欢
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
相关资源
最近更新 更多