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

如何使用pandas将8取值的教育水平分类变量重编码为4类?

pandas按规则重编码多分类教育水平变量

假设你存储数据的DataFrame对象名为df,原始分类字段为X025,以下三种方法都可以实现你需要的重编码逻辑,可根据使用习惯选择:


方法1:numpy.select 逻辑最直观

这种写法将判断条件和对应赋值一一对应罗列,后续调整规则时不容易出错,是最推荐的写法:

import numpy as np

# 按顺序编写判断条件、对应赋值
cond_list = [
    df['X025'].isin([1, 2]),
    df['X025'].isin([3, 4, 5, 6]),
    df['X025'].isin([7, 8]),
    df['X025'] < 1
]
value_list = [1, 2, 3, 4]

# 生成新列,若不需要保留原字段可以直接赋值给df['X025']覆盖
df['edu_level'] = np.select(cond_list, value_list, default=np.nan)

参数里的default=np.nan是给X025取值大于8的异常值填充空值,如果你确定原始数据没有超出1-8范围的取值,可以删掉这个参数。


方法2:pandas.cut 适合数值分段场景

因为X025是整数型分类值,用分箱方法也可以快速实现,代码更简洁:

import numpy as np

df['edu_level'] = pd.cut(
    df['X025'],
    bins=[-np.inf, 1, 3, 7, 9],  # 按左闭右开规则划分区间
    labels=[4, 1, 2, 3],         # 区间和赋值一一对应
    right=False
).astype(int) # 把分箱返回的分类类型转成整数

区间匹配逻辑:

  • X025 < 1 → 匹配[-inf, 1)区间 → 赋值4
  • 1 ≤ X025 ≤ 2 → 匹配[1, 3)区间 → 赋值1
  • 3 ≤ X025 ≤ 6 → 匹配[3, 7)区间 → 赋值2
  • 7 ≤ X025 ≤ 8 → 匹配[7, 9)区间 → 赋值3

方法3:逐行loc赋值 无需额外依赖

不想导入numpy的话可以直接用pandas的loc定位赋值,逻辑简单易读:

# 先把所有值默认设为X025<1对应的4
df['edu_level'] = 4
# 再按条件覆盖对应取值
df.loc[df['X025'].isin([1, 2]), 'edu_level'] = 1
df.loc[df['X025'].isin([3, 4, 5, 6]), 'edu_level'] = 2
df.loc[df['X025'].isin([7, 8]), 'edu_level'] = 3

校验建议

重编码完成后建议执行以下代码校验结果,避免规则写错:

# 查看新字段各取值的样本量
print(df['edu_level'].value_counts().sort_index())
# 交叉核对原字段和新字段的映射关系
print(pd.crosstab(df['X025'], df['edu_level']))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:18:22