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

Python中适用于时间序列的类Excel单变量求解(Goal Seek)工具

针对时间序列的单变量求解方案

当然有,你可以利用Python的科学计算库实现类似Excel Goal Seek的功能,且完美适配时间序列场景——因为每个时间戳的方程都是独立的,只需对每个时间点的变量值单独求解,最终得到的解自然是同长度的时间序列。

核心思路

对时间序列中的每一组Var1、Var2、Var3值,求解目标方程(示例为(Var1/X) + (X*Var2) = Var3),将每个时间点的解组合起来就是目标时间序列X。

工具与代码示例

使用scipy.optimize.root_scalar(针对单变量方程求解)结合Pandas处理时间序列:

  1. 导入依赖库
import pandas as pd
import numpy as np
from scipy.optimize import root_scalar
  1. 定义求解函数
    针对单个时间点的变量值,定义方程的残差函数(即方程左侧减右侧,目标是找到让残差为0的X):
def solve_single_x(v1, v2, v3):
    def residual(x):
        # 替换为你实际的复杂方程,示例为 (v1/x) + (x*v2) - v3 = 0
        return (v1 / x) + (x * v2) - v3
    
    try:
        # 使用brentq方法(需指定搜索区间,根据你的数据设置合理范围)
        result = root_scalar(residual, method='brentq', bracket=[1e-6, 1e6])
        return result.root if result.converged else np.nan
    except (ValueError, RuntimeError):
        # 处理无解或收敛失败的情况,返回NaN
        return np.nan
  1. 应用到整个时间序列
    用Pandas的apply或NumPy的vectorize批量处理每一行数据:
# 假设df是你的时间序列DataFrame
df['X'] = df.apply(lambda row: solve_single_x(row['Var1'], row['Var2'], row['Var3']), axis=1)

# 若数据量较大,用np.vectorize加速
vectorized_solve = np.vectorize(solve_single_x)
df['X'] = vectorized_solve(df['Var1'], df['Var2'], df['Var3'])

复杂方程适配

如果你的实际方程是非线性、含超越函数(如指数、对数)或有约束条件,只需修改residual函数即可:

  • 若X必须大于0:保持bracket的下限为正数
  • 若方程是高次多项式:可改用newton方法(需提供初始猜测值)
  • 若需最小化残差(而非严格等于0):可使用scipy.optimize.minimize,将目标设为残差的平方和

性能优化

对于大规模时间序列,可通过并行处理提升速度:

  • 使用swifter库加速Pandas的apply操作
  • 利用multiprocessing模块实现多进程并行求解

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:25:25