使用数据框优化复杂功能

时间:2018-09-17 23:05:54

标签: python pandas optimization mathematical-optimization pandas-groupby

我正在尝试使用python basinhopping优化(最大化)复杂函数,该函数从数据帧中的变量派生其值。我是最不熟悉优化技术的人,所以如果我对它太多的话请原谅。我已经搜索过,最接近的东西看起来像this。让我创建一个玩具数据框来描述问题。假设以下内容:

df = pd.DataFrame({"A":range(1,14), "B":range(5,18), "ID": 
[1,1,2,2,2,2,3,3,3,4,5,6,7],"C":[0,0,10,0,0,16,0,0,22,1,1,1,1], "last": 
[0,1,0,0,0,1,0,0,1,1,1,1,1], 
"Value": [19.25,8,91.6,71.05,45.85,16,104.95,65.8,22,24,13,28,15], "Z": 
[0,1,0,0,0,0,0,0,1,1,0,1,0]})

最困难的部分(在我看来)是目标函数的设计。就是这样。

  • ID不重复的情况(在这种情况下,ID为4,5,6,7)
    • 如果Z列= 1,则目标函数就是sum(A,B)
    • 如果Z列= 0,那么目标函数就是0.5 * sum(A,B)
  • ID重复的情况(在这种情况下为1,2,3)
    • 如果last = 1,则目标函数就是sum(A,B)
    • 如果last = 0,则目标函数将在每个ID的最后一行上递归构建。目标函数的一般公式为(上一个C)+(3 *电流A)+(1.65 *电流B)。关键是要知道这种情况的值取决于上一个值。如果值是在excel中完成的,则看起来像这样:F4 =“ F5 +(3 * A4)+(1.65 * B4)”,F5 =“ F6 +(3 * A5)+(1.65 * B5)”,F6 = “ F7 +(3 * A6)+(1.65 * B6)”,F7 =“ A7 + B7”。很明显,有一些依赖/递归
      • 此外,值3和1.65是要馈入优化器的参数。实际上,它们可以是数据集中的一列,这意味着它们的值每行都会改变

我遇到的问题是,我看到的大多数优化示例even in the documentation返回单个值。就我而言,我有一个数据框,所以我不确定该如何工作。

这是我之前所做的:将数据集分为两个:具有重复ID的数据集和具有非重复ID的数据集。对于那些重复的对象,请使用if语句来计算目标函数的值。

对于具有重复ID的对象,创建一个变量,该变量标识每个ID的最后观察值,然后从“自下而上”计算值。然后,我追加两个数据集。但是,这导致了我的主要努力:基于数据集,目标函数不是“整个”而是“波动”。

我希望我能对此有所帮助。谢谢

0 个答案:

没有答案