如何在Pandas数据框中筛选列间概率值相近的行
解决方法
要实现你需要的筛选逻辑,核心是只关注与每行最大概率值相近的情况,排除小概率值之间的无意义接近。可以按以下步骤用Pandas实现:
步骤1:分离概率列
先把数据框里的分类概率列单独提取出来,排除ID列:
prob_cols = [col for col in df.columns if col.startswith('class')]
步骤2:计算每行的最大概率值
给数据框新增一列,存储每行概率的最大值:
df['max_prob'] = df[prob_cols].max(axis=1)
步骤3:编写筛选逻辑函数
定义一个函数,检查每行是否存在至少2个概率值(包含最大值)的差值在0.05以内:
def has_close_max(row): max_p = row['max_prob'] # 筛选出与最大值差值≤0.05的所有概率值 close_values = row[prob_cols][abs(row[prob_cols] - max_p) <= 0.05] # 只要这类值的数量≥2,就符合条件 return len(close_values) >= 2
步骤4:应用筛选条件并得到结果
用apply函数把筛选逻辑应用到每一行,过滤出符合条件的行:
# 生成筛选掩码 filter_mask = df.apply(has_close_max, axis=1) # 筛选结果,去掉临时的max_prob列 result_df = df[filter_mask].drop('max_prob', axis=1)
最终结果
运行后result_df会输出你需要的行:
ID class1 class2 class3 class4 class5 1 row2 0.97 0.96 0.4 0.3 0.2 3 row4 0.97 0.98 0.2 0.3 0.2 4 row5 0.10 0.20 0.3 0.78 0.80
内容的提问来源于stack exchange,提问作者DN1
相关产品推荐
相关产品推荐

