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

求助:如何在Pandas中实现两列计算取非负值的向量化操作

解决方案

你之前的代码报错,是因为Python原生的min()函数不支持对pandas的Series(也就是DataFrame的列)和标量做逐元素比较——它会试图把整个Series和0做整体比较,而不是逐个元素判断,自然无法得到想要的结果。

下面是三种可行的解决方案,按推荐程度排序:

  • 方法一:用pandas内置的clip()方法(最简洁高效)
    直接对计算后的Series设置下限为0,小于0的值会被替换成0:

    df['C'] = (df['B'] - df['A']).clip(lower=0)
    
  • 方法二:用numpy的maximum()函数(高效且灵活)
    利用numpy的向量化操作,逐元素比较计算结果和0,取较大值:

    import numpy as np
    df['C'] = np.maximum(df['B'] - df['A'], 0)
    
  • 方法三:用apply()逐行处理(适合自定义复杂逻辑,小数据量可用)
    逐行遍历DataFrame,对每行计算B-A后和0取最大值,但大数据量下效率远低于前两种方法:

    df['C'] = df.apply(lambda row: max(row['B'] - row['A'], 0), axis=1)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:01:11