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

使用Gekko求解最优时间间隔时pandas shift报错如何解决

问题原因

你的推测是正确的,Gekko的变量是求解器专用的符号对象,不是普通Python整数。你直接在pandas的shift方法里传入shift.value的写法不符合Gekko的使用逻辑:Gekko需要目标函数是用它内置算子构建的可计算表达式,才能在迭代过程中自动更新变量值、计算梯度,你直接调用pandas的函数,Gekko无法跟踪计算流程,自然会出现类型错误。

修复方案

你的偏移搜索范围只有0~30,范围极小,完全不需要调用整数规划求解器,直接暴力遍历所有可能的偏移值即可,效率比用Gekko高得多,参考代码如下:

import pandas as pd
from random import random

n = 100000
arr = [random() for _ in range(n)]
df = pd.DataFrame({"w1": arr, "w2": arr},
                  index=pd.date_range(start="1/1/2018", periods=n, freq="T"))
df.w2 = df.w2.shift(10) * 10
weight1 = df["w1"]
weight2 = df["w2"]

best_shift = 0
max_corr = -1
# 遍历所有可能的偏移值
for s in range(31):
    temp_w2 = weight2.shift(periods=-s, freq="T")
    current_corr = weight1.corr(temp_w2)
    if current_corr > max_corr:
        max_corr = current_corr
        best_shift = s

print(f"最优偏移间隔:{best_shift}")

运行后会直接输出预期的最优值10。

如果你确实需要在更大的搜索范围内使用Gekko求解,可以使用Gekko的黑盒函数接口定义目标,但对于这个场景完全没有必要,暴力搜索的成本可以忽略不计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:06:00