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

如何拆分Pandas DataFrame列中的两位数编码为新有序变量?

拆分并重新编码整合维度数据的方法

一、拆分编码为十位(财富等级)和个位(人生阶段)

先把原编码列拆成两个数值列,同时处理特殊值-1:

import pandas as pd
import numpy as np

# 假设原数据列名为'combined_code'
# 拆分财富等级(十位)
df['wealth_code'] = np.where(df['combined_code'] == -1, -1, df['combined_code'] // 10)
# 拆分人生阶段(个位)
df['life_stage_code'] = np.where(df['combined_code'] == -1, -1, df['combined_code'] % 10)

二、映射为文本标签并设置为有序变量

1. 定义映射字典

# 财富等级映射
wealth_mapping = {
    -1: '未知',
    1: '富裕家庭',
    2: '富足家庭',
    3: '小康家庭',
    4: '低收入家庭',
    5: '贫困家庭'
}

# 人生阶段映射
life_stage_mapping = {
    -1: '未知',
    1: '未婚情侣及单身人士',
    2: '有子女的年轻夫妇',
    3: '有学龄儿童的家庭',
    4: '年长家庭及成熟夫妇',
    5: '退休老人'
}

2. 映射并转为有序类别

因为是有序变量,必须指定逻辑顺序,确保后续排序、统计分析符合业务逻辑:

# 映射标签
df['wealth_level'] = df['wealth_code'].map(wealth_mapping)
df['life_stage'] = df['life_stage_code'].map(life_stage_mapping)

# 设置为有序类别
df['wealth_level'] = pd.Categorical(
    df['wealth_level'],
    categories=['未知', '贫困家庭', '低收入家庭', '小康家庭', '富足家庭', '富裕家庭'],
    ordered=True
)

df['life_stage'] = pd.Categorical(
    df['life_stage'],
    categories=['未知', '未婚情侣及单身人士', '有子女的年轻夫妇', '有学龄儿童的家庭', '年长家庭及成熟夫妇', '退休老人'],
    ordered=True
)

三、简化版(一步拆分+映射)

如果不需要保留中间数值编码列,可直接用字符串处理(适配编码为两位数或-1的场景):

# 将编码转为字符串方便拆分
df['code_str'] = df['combined_code'].astype(str)

# 拆分并映射标签
df['wealth_level'] = df['code_str'].apply(lambda x: wealth_mapping[int(x[0])] if x != '-1' else '未知')
df['life_stage'] = df['code_str'].apply(lambda x: life_stage_mapping[int(x[1])] if x != '-1' else '未知')

# 转为有序类别(代码同上)

关于你之前尝试方法的问题

你用.map()时逐个枚举所有编码,不仅繁琐,而且只完成了单维度的映射,没有分离出人生阶段信息。上面的方法通过拆分十位/个位,只需要维护两个简洁的映射字典,逻辑清晰且易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:40:25