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

Pandas如何基于DataFrame两列组合值为数据匹配规则打标签

简洁实现方案

首先注意你原始DataFrame的Math 、Art 列名末尾带多余空格,直接按无空格列名选取会触发KeyError,第一步先清理列名,再做后续计算,整体代码比逐行apply的写法效率更高、逻辑更清晰。

完整可运行代码

import pandas as pd

# 原始数据集
df = pd.DataFrame({
    'Student ID': [123456,789456,101112,131415],
    'Math ': [3,2,4,2],
    'Art  ': [3,3,3,1]
})

# 1. 清理列名首尾多余空格
df.columns = df.columns.str.strip()

# 2. 生成combined列:用数值计算代替字符串拼接,效率更高
df['combined'] = df['Math'] * 10 + df['Art']

# 3. 定义分数组合与标签的映射关系,直接覆盖正反分数组合
score_label_map = {
    11: "Unsatisfactory",
    12: "Unsatisfactory",
    21: "Unsatisfactory",
    22: "Moderate",
    23: "Moderate",
    32: "Moderate",
    33: "Good",
    34: "Good",
    43: "Good",
    45: "Excellent",
    54: "Excellent",
    55: "Excellent"
}

# 4. 映射生成最终标签列
df['label'] = df['combined'].map(score_label_map)

实现说明

  • 生成combined列时没有用逐行apply做字符串拼接,而是直接用数学计算:Math为十位、Art为个位,Math*10 + Art直接得到整数结果,是pandas原生向量运算,数据量越大速度优势越明显,也省掉了转字符串、再转整数的冗余步骤。
  • 标签匹配用字典映射实现,后续要新增分数组合、修改对应标签,直接编辑score_label_map字典即可,不需要改动核心逻辑代码。
  • 运行后得到的结果完全匹配你的预期:
Student IDMathArtcombinedlabel
1234563333Good
7894562323Moderate
1011124343Good
1314152121Unsatisfactory

如果存在不在映射表里的分数组合,对应label会显示为空值,你可以按需在字典里补充对应的规则即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:39:35