将最接近的值转换为 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
我想将一列(下面的 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