如何基于DataFrame某列的数值区间条件生成并填充新列
解决Pandas条件生成新列的问题
嘿,我看到你在给DataFrame添加条件列时遇到了问题,咱们一步步来搞定它:
先排查你代码里的问题
你的代码有几个明显错误导致无法运行:
- 模块导入拼写错误:
imprt pandas as pd要改成import pandas as pd,imort numpy as np改成import numpy as np np.where嵌套语法错误:最后一个np.where多了一个闭合括号,导致语法结构混乱between参数顺序错误:pd.Series.between(left, right)要求左参数 ≤ 右参数,你写的between(2,0)和between(0,-2)是无效的,因为左值大于右值了
方法1:修正后的np.where实现
先修复语法和逻辑问题,用嵌套的np.where实现你的需求:
import pandas as pd import numpy as np df = pd.DataFrame({'A':[-4,-3.5,-2.5,-1,1,1.5,2,2.5,3.5]}) # 修正逻辑和语法后的代码 df['B'] = np.where( df['A'] > 2, 'A1', np.where( (df['A'] <= 2) & (df['A'] > 0), 'A2', np.where( (df['A'] <= 0) & (df['A'] > -2), 'A3', 'A4' # 剩下的情况就是A ≤ -2 ) ) ) print(df)
运行后输出:
A B 0 -4.0 A4 1 -3.5 A4 2 -2.5 A4 3 -1.0 A3 4 1.0 A2 5 1.5 A2 6 2.0 A2 7 2.5 A1 8 3.5 A1
方法2:更直观的pd.cut方法(推荐)
对于这种区间划分的需求,用pd.cut会更清晰,代码可读性更高,也更容易维护:
import pandas as pd import numpy as np df = pd.DataFrame({'A':[-4,-3.5,-2.5,-1,1,1.5,2,2.5,3.5]}) # 定义区间边界和对应的标签 bins = [-np.inf, -2, 0, 2, np.inf] labels = ['A4', 'A3', 'A2', 'A1'] df['B'] = pd.cut(df['A'], bins=bins, labels=labels, include_lowest=True) print(df)
这里的区间规则完全匹配你的需求:
- (-∞, -2] → 对应'A4'(A≤-2的情况)
- (-2, 0] → 对应'A3'(0≥A>-2的情况)
- (0, 2] → 对应'A2'(2≥A>0的情况)
- (2, ∞) → 对应'A1'(A>2的情况)
运行结果和第一种方法完全一致。
为什么推荐pd.cut?
当你需要调整区间或者新增标签时,只需要修改bins和labels列表即可,不需要修改嵌套的条件判断,代码更简洁易读,也不容易出错。
内容的提问来源于stack exchange,提问作者Jabbar
相关产品推荐
相关产品推荐

