如何用numpy.isclose为DataFrame按指定容差生成adjusted列?
批量基于容差映射数值到指定基准值
数据集与需求
原始数据代码
import numpy as np import pandas as pd data = { 'value':[9.1,10.5,11.8, 20.1,21.2,22.8, 9.5,10.3,11.9, ] } df = pd.DataFrame(data, columns = ['value'])
原始DataFrame输出
value 0 9.1 1 10.5 2 11.8 3 20.1 4 21.2 5 22.8 6 9.5 7 10.3 8 11.9
需求说明
需要添加名为adjusted的新列,使用numpy.isclose函数,将落在10±1范围内的数值映射为10,落在21±1范围内的数值映射为21,期望结果如下:
value adjusted 0 9.1 10 1 10.5 10 2 11.8 10 3 20.1 21 4 21.2 21 5 22.8 21 6 9.5 10 7 10.3 10 8 11.9 10
尝试的代码(仅支持单个基准值)
np.isclose(df['value'], 10, atol=1)
解决方案(一行代码实现)
利用np.select批量处理多组条件与映射规则,结合np.isclose完成容差判断:
df['adjusted'] = np.select([np.isclose(df['value'], 10, atol=1), np.isclose(df['value'], 21, atol=1)], [10, 21])
代码说明
np.select接收两个核心参数:第一个是条件列表,第二个是对应条件满足时的取值列表np.isclose(df['value'], 10, atol=1)用于判断数值是否处于10±1的范围内(atol为绝对容差)- 条件按顺序匹配,满足第一个条件则映射为10,满足第二个则映射为21
内容的提问来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

