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

如何将Sympy.Solve应用于DataFrame每行,求解含λ的双边方程?

如何将SymPy求解应用到DataFrame每行并生成结果列

步骤1:先求λ的通用解析表达式

不要直接代入数值求解,先把所有参数定义为符号变量,让SymPy帮你解出λ的通用公式——这比逐行调用solve效率高得多,也避免手动移项的麻烦。

from sympy import symbols, Eq, solve, lambdify
import math
import pandas as pd

# 定义所有符号变量
λ, tmin, tmax, Tmin, Tmax, D = symbols('λ tmin tmax Tmin Tmax D')
pi = math.pi

# 构建方程右侧的表达式
rhs = (((Tmax-Tmin)/2) * (λ - tmin) * (1 - (2/pi))) + \
      (((Tmax-Tmin)/2) * (tmax - λ) * (1 + (2/pi))) - \
      (((Tmax-Tmin)/2) * (tmax - tmin))

# 构建等式 D = 右侧表达式
eq = Eq(D, rhs)

# 求解λ的解析表达式
lambda_expr = solve(eq, λ)[0]

步骤2:将表达式转为可批量计算的函数

用lambdify把符号表达式转换成支持numpy数组运算的函数,这样可以直接对接DataFrame的列数据:

# 转换为numpy兼容函数,参数顺序对应tmin, tmax, Tmin, Tmax, D
lambda_func = lambdify((tmin, tmax, Tmin, Tmax, D), lambda_expr, 'numpy')

步骤3:应用到DataFrame生成新列

直接用向量化方式计算,效率远高于逐行apply:

# 构造示例DataFrame
data = [[6, 14, 33.2067, 42.606, 19.5526], [6, 14, 33.4885, 43.0318, -27.9222]]
df = pd.DataFrame(data, columns=['tmin', 'tmax', 'Tmin', 'Tmax', 'D'])

# 生成结果列
df['lambda_result'] = lambda_func(df['tmin'], df['tmax'], df['Tmin'], df['Tmax'], df['D'])

print(df)

备选:逐行apply方式(仅适合小数据量)

如果遇到复杂到无法提前求解析表达式的场景,也可以用apply逐行求解,但效率较低:

def solve_lambda(row):
    # 提取当前行的数值
    tmin_val, tmax_val = row['tmin'], row['tmax']
    Tmin_val, Tmax_val = row['Tmin'], row['Tmax']
    D_val = row['D']
    
    # 代入数值构建方程
    rhs_val = (((Tmax_val-Tmin_val)/2) * (λ - tmin_val) * (1 - (2/pi))) + \
              (((Tmax_val-Tmin_val)/2) * (tmax_val - λ) * (1 + (2/pi))) - \
              (((Tmax_val-Tmin_val)/2) * (tmax_val - tmin_val))
    eq_val = Eq(D_val, rhs_val)
    
    return solve(eq_val, λ)[0]

df['lambda_result'] = df.apply(solve_lambda, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:45:43