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

基于Pandas多列创建新列:检测列表是否包含值1

解决方法

你的问题出在1 in df['ID1']的判断逻辑上——这是检查整个ID1列是否存在包含1的行,返回的是单个布尔值,所以用np.where时会把所有行的Condition设为同一个值,并非逐行判断。

下面是两种可行的实现方式:

方法一:逐行遍历检查(直观易读)

先定义一个函数,对每行的指定列逐一检查是否存在包含1的列表(同时处理None空值),再用apply逐行执行:

def has_one_in_cols(row, target_cols):
    for col in target_cols:
        val = row[col]
        # 先排除空值,再检查1是否在列表内
        if val is not None and 1 in val:
            return True
    return False

# 指定需要检查的列集合
target_columns = ['ID1', 'ID2', 'ID3']
df['Condition'] = df.apply(lambda r: has_one_in_cols(r, target_columns), axis=1)

方法二:向量化处理(高效适合大数据)

先把每个目标列转换为"是否包含1"的布尔列,再按行取逻辑或(任意一列满足则为True):

target_columns = ['ID1', 'ID2', 'ID3']
# 生成每个列的布尔判断结果
bool_series_list = [
    df[col].apply(lambda x: x is not None and 1 in x) 
    for col in target_columns
]
# 合并布尔列后,按行取任意为真的结果
df['Condition'] = pd.concat(bool_series_list, axis=1).any(axis=1)

两种方法都能正确处理你给出的示例:

  • 第一行ID2包含1,Condition为True
  • 第二行所有列都不含1,Condition为False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:52:10