我想将一列中最接近的值(下面的col2(转换为相同的值(比如最大的值(。假设以下数据帧:
df = pd.DataFrame({"col1":[0,1,2,3,4,5,6],"col2":[1,5,6,10,12,14,17]})
col1 col2
0 0 1
1 1 5
2 2 6
3 3 10
4 4 12
5 5 14
6 6 17
给定列col2和接近度阈值2:差5和6小于阈值,因此两者将相同,即6。值1和17与col2中的其余值相距甚远,因此没有变化。10、12和14之间的差异小于2,因此将它们全部更改为14。(为什么我需要这个过程:当使用pytesseract.image_to_data将图像转换为文本时,文本的顶部坐标略有不同,我想固定这些坐标并使其值相同。(
给定col2和接近度阈值2的最终输出为:
col1 col2
0 0 1
1 1 6
2 2 6
3 3 14
4 4 14
5 5 14
6 6 17
非常感谢您的帮助!
如果值像样本数据中那样排序,请使用:
df['col2'] = df['col2'].mask(df['col2'].diff(-1).abs().le(2)).bfill()
print (df)
col1 col2
0 0 1.0
1 1 6.0
2 2 6.0
3 3 14.0
4 4 14.0
5 5 14.0
6 6 17.0