筛选Pandas中A-F列仅单个值在(0,5]其余大于5的行
问题分析
你原来的代码存在核心逻辑错误:直接对列名(字符串类型)做数值比较,没有对对应列的实际取值做判断,也没有覆盖「其余5列取值均大于5」的限制条件。
实现代码
你可以用如下向量化操作完成筛选,性能远高于逐行遍历:
# 定位要判断的A-F列(示例中是最后6列) target_cols = df.columns[-6:] # 统计每行满足(0,5]区间的列数 count_in_range = ((df[target_cols] > 0) & (df[target_cols] <= 5)).sum(axis=1) # 统计每行取值大于5的列数 count_gt5 = (df[target_cols] > 5).sum(axis=1) # 筛选同时满足1个列在(0,5]、5个列大于5的行 result_df = df[(count_in_range == 1) & (count_gt5 ==5)]
逻辑说明
- 用
sum(axis=1)对每行的布尔值统计计数,避免了低效的逐行apply操作 - 同时校验两个计数条件,完全覆盖需求:既保证只有1个测点在0-5m区间,也保证其余所有测点都大于5m,自动排除了存在取值<=0的异常行
内容的提问来源于stack exchange,提问作者Krystian Warda
相关产品推荐
相关产品推荐

