如何在Pandas中更简洁地实现按条件赋值生成字符串标签新列的操作
更简洁的实现方案
你这个属于三类互斥条件的赋值场景,有两种更简洁的实现方式:
方案1:嵌套np.where(逻辑最直白,代码最短)
不需要额外定义条件列表、标签列表,一行即可完成逻辑对应:
import pandas as pd import numpy as np from sklearn import datasets wine = pd.DataFrame(datasets.load_wine().data) wine.columns = datasets.load_wine().feature_names wine['status_label'] = np.where(wine.hue > 1, 'A', np.where(wine.hue == 1, 'B', 'C'))
方案2:pd.cut()(适合后续扩展分箱规则)
如果后续可能调整hue的分箱阈值,用pandas原生分箱方法可维护性更高:
# 对应规则:小于1→C、等于1→B、大于1→A wine['status_label'] = pd.cut( wine['hue'], bins=[-np.inf, 1, np.nextafter(1, np.inf), np.inf], labels=['C', 'B', 'A'], right=False )
不同写法的适用场景
- 嵌套
np.where:适合3个及以内互斥条件的场景,代码短逻辑直观,不需要额外学习成本 pd.cut:适合有序区间类的条件赋值,分箱档位越多优势越明显,修改阈值只需要调整bins参数即可- 原
np.select:灵活度最高,适合无规律的多条件组合场景,但需要单独维护条件和返回值的映射列表
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

