如何将Pandas DataFrame列中阈值范围内的相近数值替换为组内最大值
Pandas 实现接近数值分组替换为组最大值方案
完整实现代码
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({"col1":[0,1,2,3,4,5,6],"col2":[1,5,6,10,12,14,17]}) # 自定义接近度阈值 threshold = 2 # 核心处理逻辑 # 1. 对目标列升序排序,保留原索引 sorted_col = df['col2'].sort_values() # 2. 基于差值生成分组编号:相邻值差大于阈值则划分为新组 groups = (sorted_col.diff() > threshold).cumsum() # 3. 分组计算最大值后映射回原DataFrame的行顺序 df['col2'] = sorted_col.groupby(groups).transform('max').reindex(df.index) # 输出结果 print(df)
输出结果
col1 col2 0 0 1 1 1 6 2 2 6 3 3 14 4 4 14 5 5 14 6 6 17
逻辑说明
- 先对目标列做升序排序,保证数值接近的元素相邻,为后续差分判断分组做准备
- 计算排序后序列相邻元素的差值,差值大于阈值的位置标记为新分组的起点,通过累加得到每个数值对应的分组编号
- 按分组计算组内最大值,再通过
reindex恢复原DataFrame的行顺序,赋值回原列即完成处理
场景适配
针对pytesseract识别文本坐标修正场景,仅需要将代码中的col2替换为识别结果中的顶部坐标列名,调整threshold为你可接受的坐标偏差范围即可直接使用。
内容的提问来源于stack exchange,提问作者Sam S.
相关产品推荐
相关产品推荐

