我正在处理一个数据集。数据包含不同小数位的值。数据和代码如下所示:
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
函数计算此列,容差为2(正负1)。最后,我希望得到下表所示的结果
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
我尝试了这一行,但我得到的结果只有这样的真和假,而且这只是一个值(10),而不是所有的值。
np.isclose(df1['value'],10,atol=2)
有谁能帮我解决这个问题,用一行计算出10和21的公差吗?
2条答案
按热度按时间kyks70gy1#
如果只有两个不同的值,一种可能的解决方案是使用np.where:
tjjdgumg2#
确切的逻辑和如何推广还不完全清楚。下面是两种选择。
假设你想根据一系列已定义的引用来测试你的值,你可以使用底层的numpy数组和broadcasting:
假设你想对连续的值进行分组,你可以得到
diff
,并在差值超过阈值时开始一个新的组,然后得到round
,并通过groupby.transform
得到每组的中值:输出: