如何在np.where中为pandas DataFrame列列表迭代生成判断条件
最优实现方案
直接使用pandas原生向量化方法即可实现任意长度列集合的批量判断,无需手动拼接或条件:
对于单个待校验列集合cols_list,实现代码如下:
# 等价于所有 (df[col] ==1) 的或运算,布尔值直接转1/0 df['new_col'] = df[cols_list].eq(1).any(axis=1).astype(int)
批量处理上百个校验规则
如果需要同时处理多组不同的cols_list,可以先把「新列名-待校验列集合」的对应关系整理成映射表,直接循环处理即可:
# 整理所有规则:格式为 (新列名, 待校验列集合) col_rule_mapping = [ ("new_col_1", ["col1", "col2", "col3"]), ("new_col_2", ["col4", "col5"]), ("new_col_3", ["col6", "col7", "col8", "col9"]), # 剩余上百条规则直接按格式补充即可 ] # 批量生成计算列 for new_col, check_cols in col_rule_mapping: # 可选:增加列存在性校验,避免因列缺失报错 exist_cols = [c for c in check_cols if c in df.columns] if not exist_cols: df[new_col] = 0 continue df[new_col] = df[exist_cols].eq(1).any(axis=1).astype(int)
方案说明
- 适配任意长度的待校验列集合,无需手动调整判断逻辑
- 底层为pandas向量化运算,执行效率远高于手动拼接条件或逐行遍历
- 可灵活调整判断规则:如果需要判断大于0将
eq(1)替换为gt(0)即可,需要所有列同时满足条件将any(axis=1)替换为all(axis=1)即可。
内容的提问来源于stack exchange,提问作者Python coder
相关产品推荐
相关产品推荐

