【问题标题】:Converting closest values to a fixed value in a pandas dataframe column将熊猫数据框列中最接近的值转换为固定值
【发布时间】: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


【解决方案1】:

如果值按照示例数据中的方式排序,则使用:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2019-10-12
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    相关资源
    最近更新 更多