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
相关产品推荐
相关产品推荐

