Python中能否通过列索引组合条件语句简化DataFrame多列判断?
更简洁的批量列条件判断方案
当然有更高效省心的实现方式!当你需要对一整列范围的变量统一应用条件时,完全不用手动写一堆&来拼接每个列的判断,我们可以借助Pandas的向量化特性批量处理,完美适配大量列的场景:
核心思路
先精准选中需要判断的目标列范围(比如所有P开头的列,或者通过位置索引选取),然后用.gt(0)批量判断每个值是否大于0,最后用.all(axis=1)检查每一行的所有目标列是否都满足条件(axis=1表示按行维度判断)。
具体实现方法
针对你的数据集,这里提供两种优化后的简洁写法:
方法1:用np.where批量生成标记
import numpy as np import pandas as pd # 选中所有列名包含"P"的列(适配P1、P2...Pn的批量场景) target_cols = df.filter(like='P') # 也可以用位置索引精准选取:target_cols = df.iloc[:, 1:] # 假设Name是第1列,后续都是目标列 df['Check'] = np.where(target_cols.gt(0).all(axis=1), 'Yes', 'No')
方法2:用loc批量赋值(更高效)
先初始化Check列为默认值No,再给满足条件的行批量赋值Yes,适合大型数据集:
df['Check'] = 'No' target_cols = df.filter(like='P') df.loc[target_cols.gt(0).all(axis=1), 'Check'] = 'Yes'
效果验证
用你提供的测试数据:
| Name | P1 | P2 | P3 |
|---|---|---|---|
| A | 1 | 0 | 2 |
| B | 1 | 1 | 1 |
| C | 0 | 5 | 6 |
运行上述代码后,最终的Check列结果如下:
| Name | P1 | P2 | P3 | Check |
|---|---|---|---|---|
| A | 1 | 0 | 2 | No |
| B | 1 | 1 | 1 | Yes |
| C | 0 | 5 | 6 | No |
完全匹配你的需求,而且不管后续新增多少个P开头的列,都不用修改条件逻辑,只需要确保目标列选中正确即可!
内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

