移除Pandas DataFrame中相邻行相对差异低于阈值的低置信度行
处理Pandas DataFrame相邻行的过滤需求
先修正计算代码的笔误
你计算relative_xc_diff的代码里有个列名错误,最后一行的df["relative_x_diff"]应该改为df["relative_xc_diff"],修正后的完整代码:
x_centers = df["x_center"].values relative_xc_diff = (abs(x_centers[1:] - x_centers[:-1]) / df["width"].values[:-1]) * 100 df["relative_xc_diff"] = 0 df["relative_xc_diff"].values[1:] = relative_xc_diff
实现相邻行过滤逻辑
要实现当relative_xc_diff < 50时保留置信度更高的行,我们可以先标记需要保留的行,再统一过滤,避免边删边遍历导致的索引混乱:
# 初始化保留标记,默认全保留 keep = [True] * len(df) # 遍历从第2行开始的每一行(索引从1开始) for i in range(1, len(df)): # 检查当前行的相对差异是否小于50 if df["relative_xc_diff"].iloc[i] < 50: # 比较当前行与前一行的confidence current_conf = df["confidence"].iloc[i] prev_conf = df["confidence"].iloc[i-1] if current_conf < prev_conf: # 当前行置信度更低,标记为删除 keep[i] = False else: # 前一行置信度更低,标记为删除 keep[i-1] = False # 应用过滤得到结果 df_filtered = df[keep]
验证结果
针对你给出的示例DataFrame,运行上述代码后:
- 索引4和5的
relative_xc_diff为45.12<50,索引4的confidence(0.86141)更高,所以标记索引5为删除 - 索引7和8的
relative_xc_diff为34.33<50,索引8的confidence(0.82202)更高,所以标记索引7为删除
最终df_filtered会去掉索引5和7的行,符合你的需求。
内容的提问来源于stack exchange,提问作者rajput_18
相关产品推荐
相关产品推荐

