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

在Pandas DataFrame中使用eval计算两列最大值遇报错如何解决?

解决pandas df.eval无法使用maximum计算列最大值的问题

问题原因

pandas的df.eval()默认解析器不支持直接调用maximum这个ufunc,即使指定engine='python',也因命名空间限制无法直接使用该函数。

可行解决方案

  • 方法一:使用np.maximum结合engine='python'
    利用pandas eval环境中默认可用的np别名,直接调用numpy的元素级最大值函数:

    df = pd.DataFrame( {'a':[1,3,5],
                        'b':[6,4,2] } )
    
    df['c'] = df.eval('np.maximum(a, b)', engine='python')
    

    该写法和你原本的maximum(df.a, df.b)逻辑完全一致,同时保持了表达式的可读性。

  • 方法二:用pandas where方法实现
    不依赖numpy,直接通过Series的where方法实现元素级最大值判断:

    df['c'] = df.eval('a.where(a > b, b)')
    

    当a的值大于b时保留a,否则取b的值,最终得到两列的元素级最大值。

  • 方法三:注册自定义函数(适合频繁使用场景)
    如果你需要多次在df.eval()中使用maximum,可以将其注册到eval的局部命名空间:

    import pandas as pd
    from numpy import maximum
    
    @pd.eval.register
    def register_maximum(expr, **kwargs):
        return pd.eval(expr, local_dict={'maximum': maximum}, **kwargs)
    
    # 注册后即可直接使用
    df['c'] = df.eval('maximum(a, b)')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:00:01