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

Pandas多列条件匹配修改列值未生效问题求助

Pandas多列条件匹配问题修复

错误原因

你的代码核心问题是用了Python原生的is not None做Series非空判断:is/is not是用于判断单个对象本身的身份是否一致,df['A'] is not None实际是判断整个Series对象是否为None,返回值永远是单个布尔值True,因此前两个条件全程生效,最终等价于只有df['C'] == '0'的判断在起作用,导致所有C列为'0'的行都被修改。

修复方案

Pandas中逐元素判断非空需要使用内置的.notna()方法,有两种实现方式可选:

方式1:修改你原有的np.select逻辑

import numpy as np
import pandas as pd

df = pd.DataFrame({"A":['something',None,'filled',None], "B":['test','test','test',None], "C":['rt','0','0','0']})

# 替换is not None为.notna()做逐元素非空判断
conditions = [(df['A'].notna()) & (df['B'].notna()) & (df['C'] == '0')]
values = ['new']

df['C'] = np.select(conditions, values, default=df["C"])

方式2:更简洁的loc写法(无需引入numpy)

df = pd.DataFrame({"A":['something',None,'filled',None], "B":['test','test','test',None], "C":['rt','0','0','0']})

df.loc[df['A'].notna() & df['B'].notna() & (df['C'] == '0'), 'C'] = 'new'

运行结果

最终输出的df符合需求,仅A、B同时非空且C为'0'的行会被修改:

ABC
somethingtestrt
Nonetest0
filledtestnew
NoneNone0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:24:07