You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pandas中设置虚拟编码参考水平并指定删除项?

在Pandas中指定虚拟编码的参考水平

嘿,这个需求我太懂了!确实在R里用factor指定levels就能轻松搞定参考水平,但在Pandas里其实也有对应的方案,核心思路是先把分类变量转换成Categorical类型来定义类别顺序,这样get_dummies就能按照你的意愿删除指定的参考水平了。下面给你两种实用的方法:

方法一:用Categorical指定参考水平(推荐)

这种方法和R里的factor逻辑最像,先手动定义分类变量的类别顺序,把你想设为参考的水平放在第一个位置,再用drop_first=True删除它:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({"color": ["blue", "red", "green", "red", "blue", "green"]})

# 将color转为Categorical类型,把参考水平"red"放在categories的首位
df["color"] = pd.Categorical(
    df["color"],
    categories=["red", "blue", "green"],  # 顺序决定参考水平
    ordered=False  # 这里不需要有序分类,所以设为False
)

# 生成虚拟变量,drop_first=True会自动删除第一个类别(也就是参考水平red)
dummy_vars = pd.get_dummies(df["color"], drop_first=True)
print(dummy_vars)

运行后输出的结果只会包含blue和green两列,red作为参考水平被排除,完全符合你的需求。

方法二:手动删除参考列(适合快速场景)

如果你不想转换变量类型,也可以先生成所有虚拟变量,再手动删掉你指定的参考列:

# 生成所有类别的虚拟变量
all_dummies = pd.get_dummies(df["color"], prefix="color")

# 删除作为参考的列(比如color_red)
dummy_vars = all_dummies.drop("color_red", axis=1)

这种方法虽然直观,但当分类变量类别较多时,不如第一种方法高效,而且需要准确写出要删除的列名。

小提示

Pandas的Categorical类型会严格遵循你设定的类别顺序,所以只要把参考水平放在categories参数的第一个位置,get_dummies的drop_first就会精准删除它,和R中factor的操作逻辑完全对齐~

内容的提问来源于stack exchange,提问作者zesla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:55:45