You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas技术实现:如何按特定规则生成布尔值新列?

优化解决方案

原代码问题分析

你当前的循环逻辑存在覆盖赋值的问题:每遍历一列就会重新设置boost_prev的值,最终结果只由最后一列的判断决定,这就是为什么第一行明明有1.0,但boost_prev却被设为False(因为最后一列是0.0 <1)。此外,循环处理列的方式在列数增多时效率极低,不符合Pandas的向量化操作原则。

向量化实现方案

利用Pandas的向量化方法,无需循环即可高效完成判断,完美匹配你的三个规则:

import pandas as pd
import numpy as np

# 假设handicap_test_cols是你的目标DataFrame
# 1. 判断每行是否存在1
has_one = handicap_test_cols.isin([1]).any(axis=1)
# 2. 判断每行是否全为0
all_zero = handicap_test_cols.eq(0).all(axis=1)
# 3. 按规则生成Boosted列
handicap_test_cols['Boosted'] = np.select(
    [has_one, all_zero],
    [True, np.nan],
    default=False
)

逻辑说明

  • has_one:检查每行任意一列是否包含1,返回布尔序列
  • all_zero:检查每行所有列是否都是0,返回布尔序列
  • np.select:按顺序匹配条件,优先匹配has_one(设为True),其次匹配all_zero(设为NaN),剩下的情况(只有-1和0且不全为0)设为False

验证示例

用你提供的测试数据验证:

wk_handicap0  wk_handicap1 Boosted
0             1.0           0.0    True
194           0.0           0.0     NaN
# 假设有一行是[-1, 0],Boosted会是False

内容的提问来源于stack exchange,提问作者Nathan Pared

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:32:09