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

Pandas创建DataFrame新分类列赋值结果异常问题排查

错误原因

你的代码存在两个核心问题:

  • 逐行遍历Status列时,每次命中if/elif分支都会给整列Final Status重新赋值,最终结果只由最后一次循环命中的分支决定:如果最后一个遍历到的值是Closed/Solved,就只会把列里的Closed、Solved替换为Closed,Open、Pending会保留原值;如果最后一个值是Open/Pending,就只会把Open、Pending替换为Open,Closed、Solved保留原值,完全达不到分类效果。
  • pandas的整列数据转换不需要写for循环逐行处理,用内置的向量化方法效率更高、逻辑更简洁,也不容易出赋值错误。
正确实现方案

你可以选任意一种符合你编码习惯的写法:

方法1:映射字典替换(最易维护)

直接给replace方法传入原始值到目标值的映射字典,一步完成全列替换,后续要加新的状态映射只需要改字典就行:

status_mapping = {
    "Open": "Open",
    "Pending": "Open",
    "Closed": "Closed",
    "Solved": "Closed"
}
Telecom["Final Status"] = Telecom["Status"].replace(status_mapping)

方法2:条件判断赋值(逻辑最直观)

用numpy.where做逐行条件判断,完全匹配你写的规则逻辑:如果状态属于Open/Pending就赋值Open,否则赋值Closed:

import numpy as np
Telecom["Final Status"] = np.where(
    Telecom["Status"].isin(["Open", "Pending"]),
    "Open",
    "Closed"
)

两种方法运行后,Solved、Closed都会被统一归为Closed,Open、Pending统一归为Open,完全符合你的分类要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:51:25