如何正确使用numpy.searchsorted实现DataFrame列按区间映射左边界值
问题原因
你原来的代码逻辑偏差来自np.searchsorted返回值的含义:默认返回的是目标值可插入的第一个位置,对应区间的右边界索引,直接取会得到右边界值,和你要取左边界的需求不符。
最小改动修正方案
仅需要修改最后一行赋值代码即可,调整side参数为right,再将返回的索引减1:
Example["Spcx"] = Spaces[np.searchsorted(Spaces, Example["Spcx"], side = 'right') - 1]
验证结果
运行修改后的代码,输出的Spcx列和你预期的结果完全一致:
Spcx 0 0.000 1 0.000 2 0.125 3 0.100 4 0.100 5 0.100 6 0.125 7 0.150 8 0.225 9 0.200 10 0.125 11 0.125
可选Pandas原生实现方案
如果你不想依赖Numpy接口,也可以用Pandas自带的cut方法实现,可读性更强:
Example["Spcx"] = pd.cut(Example["Spcx"], bins=Spaces, right=False, labels=Spaces[:-1]).astype(float)
参数说明:
bins=Spaces:用你定义的列表作为区间划分边界right=False:区间为左闭右开,完全匹配你的规则labels=Spaces[:-1]:每个区间直接映射为对应左边界值
内容的提问来源于stack exchange,提问作者DaniV
相关产品推荐
相关产品推荐

