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

如何将DataFrame数值型weight列转为离散分类值用于后续独热编码

pandas连续值列转离散分类列实现方法

需求说明

处理DataFrame数据集时,需要将weight列的连续数值按固定规则映射为0/1/2三类离散值,方便后续执行独热编码,映射规则为:

  • 数值小于90(计算式:173-83)映射为0
  • 数值大于等于90、小于173映射为1
  • 数值大于等于173映射为2

对应自定义判断逻辑参考:

def classificator(value):
    if value < (173-83):
        return 0
    elif value < (173):
        return 1
    else:
        return 2

实现方案

方案1:使用pandas内置cut函数(推荐,性能最优)

pd.cut是pandas专门用于连续值分箱的内置方法,执行效率远高于逐行遍历,适合各类数据量场景,逻辑和自定义规则完全对齐:

import pandas as pd

# 定义分箱区间边界、对应分类标签
# right=False 表示区间为左闭右开,匹配 value < 阈值 的判断逻辑
bins = [-float("inf"), 173-83, 173, float("inf")]
labels = [0, 1, 2]

# 写法1:新增列存储分类结果(推荐,保留原始weight字段便于回溯校验)
df["weight_cat"] = pd.cut(df["weight"], bins=bins, labels=labels, right=False).astype(int)

# 写法2:直接替换原有weight列
# df["weight"] = pd.cut(df["weight"], bins=bins, labels=labels, right=False).astype(int)

转换完成后直接对分类列做独热编码即可,和gender这类原生分类列的处理效果完全一致,示例:

# 对分类后的weight列做one hot encode
df = pd.get_dummies(df, columns=["weight_cat"], prefix="weight")

方案2:使用apply映射自定义函数

如果后续分类逻辑变复杂,无法通过简单分箱实现,可以直接用apply方法逐行调用写好的分类函数:

def classificator(value):
    if value < (173-83):
        return 0
    elif value < (173):
        return 1
    else:
        return 2

# 新增分类列
df["weight_cat"] = df["weight"].apply(classificator)

# 替换原列
# df["weight"] = df["weight"].apply(classificator)

注意:如果weight列存在空值,需要先做缺失值处理再执行转换,否则会触发判断逻辑报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 02:36:32