将最接近的值转换为 pandas 数据框列中的固定值

Converting closest values to a fixed value in a pandas dataframe column

我想将一列(下面的 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