【发布时间】:2021-12-28 02:11:32
【问题描述】:
我想将列的最接近值(下面的 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
非常感谢您的帮助!
【问题讨论】:
-
改写你的问题。不清楚。查看输出与输入,您似乎希望按间隔为 5 的箱进行分组,并在每个箱中找到最大的箱。如果是这样,那我们可以试试
df.groupby(pd.cut(df['col2'],[0,4,9,14,19,24], labels=[1,2,3,4,5]))['col2'].transform('max') -
感谢 wwnde:事实上,我正在寻找的是将相似的值分组为一个固定值(最大的值)。比如说,10、12 和 14 都将是 14。值 17 与其余所有值相去甚远,所以没有变化,值 1 也是如此。5 和 6 靠得很近,所以都是 6。
-
接近容差值是多少
-
这里的接近度公差值是2,作为一个例子,但是在将图像转换为文本数据的实际情况下,我的接近度公差值为5。
-
您的逻辑不起作用,因为 1-5 也将小于 2,这对我来说是介于逻辑之间的。如果它没有出现其他可能导致错误更换的情况,我会看看如何提供帮助
标签: python pandas dataframe grouping data-manipulation