如何在pandas中判断多列非空并按指定规则生成新列
首先注意你现有代码的小问题:df['A'].notnull是方法引用,需要加括号调用写成df['A'].notnull()才能得到正确的布尔判断序列。
你可以通过嵌套np.where或者使用np.select实现多条件判断,两种写法如下:
写法1:嵌套np.where(贴合你现有代码逻辑)
df['D'] = np.where( df['A'].notnull(), df['A'], np.where( df['B'].notnull() & df['C'].notnull(), df['B'] + df['C'], np.nan ) )
逻辑分层:先判断A非空直接取A值,A为空时再判断B、C是否同时非空,满足则拼接两列值,否则赋值NaN。
写法2:np.select(更适合多条件拓展,可读性更高)
# 提前定义所有条件和对应取值 conditions = [ df['A'].notnull(), df['B'].notnull() & df['C'].notnull() ] values = [ df['A'], df['B'] + df['C'] ] df['D'] = np.select(conditions, values, default=np.nan)
如果后续需要新增判断规则,只需要在conditions和values列表里对应添加条目即可,维护成本更低。
两种写法运行后都可以得到你预期的输出结果。
内容的提问来源于stack exchange,提问作者LTWood
相关产品推荐
相关产品推荐

