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

如何用Pandas eval根据每行formula列计算生成新列C?

嘿,这个需求我之前也碰到过——直接用df.eval(df['formula'])确实行不通,因为它是把表达式整体作用在整个DataFrame上,没法逐行匹配不同的公式。不过有几个简单靠谱的方法能解决这个问题:

方法1:用apply结合原生eval(直观易用)

这是最直接的思路:逐行读取公式,把当前行的列值作为变量代入计算。代码示例如下:

import pandas as pd

df = pd.DataFrame({'A': [1,2,3], 'B': [1,2,3], 'formula': ['A+B', 'A-B', 'A*B']})
# 逐行执行公式,row.to_dict()把当前行转成字典作为eval的局部变量
df['C'] = df.apply(lambda row: eval(row['formula'], globals(), row.to_dict()), axis=1)

方法2:用numexpr加速(适合大数据量场景)

如果你的DataFrame行数很多,原生eval的速度可能不够看。这时候可以用numexpr库来优化计算效率,它专门针对数值计算做了加速优化:

import pandas as pd
import numexpr

df = pd.DataFrame({'A': [1,2,3], 'B': [1,2,3], 'formula': ['A+B', 'A-B', 'A*B']})

def calc_row(row):
    return numexpr.evaluate(row['formula'], local_dict=row.to_dict())

df['C'] = df.apply(calc_row, axis=1)

注:需要先安装numexpr,执行pip install numexpr即可。

最终效果

不管用哪种方法,你都会得到想要的结果:

A  B formula  C
0  1  1    A+B  2
1  2  2    A-B  0
2  3  3    A*B  9

小提醒

  • 公式里的变量名必须和DataFrame的列名完全一致,否则会报错;
  • 如果公式是来自外部用户输入,要警惕eval的安全风险(比如恶意代码注入),但如果是你自己生成的公式就不用担心这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:48:04