【发布时间】:2020-09-15 10:28:52
【问题描述】:
我正在尝试优化 Pandas 数据框中的一列数据。我浏览了过去的帖子,但找不到解决优化数据框中列中的值问题的帖子。这是我的第一篇文章,对编码来说相对较新,所以提前道歉。下面是我正在使用的代码
from pandas import DataFrame
import numpy as np
from pulp import *
heading = [184, 153, 140, 122, 119]
df = DataFrame (heading, columns=['heading'])
df['speed'] = 50
df['ratio'] = df.speed/df.heading
conditions = [
(df['ratio'] < 0.1),
(df['ratio'] >= 0.1 ) & (df['ratio'] < 0.2),
(df['ratio'] >= 0.2 ) & (df['ratio'] < 0.3),
(df['ratio'] >= 0.3 ) & (df['ratio'] < 0.4),
(df['ratio'] > 0.4 )]
choices = [3, 1, 8, 5, 2]
df['choice'] = np.select(conditions, choices)
df['final_column'] = df.choice * df.heading
print(np.sum(df.final_column))
我使用 np.select 搜索“条件”并返回适当的“选择”。这就像我在 excel 中使用的 vlookup。
我正在尝试获取 PuLP 或任何其他适当的优化工具,甚至可能只是一个循环来找到 df.speed 的最佳值(我从临时值 50 开始)以最大化 ' 中的值总和final_column。以下是我尝试过的代码,但它不起作用。
prob = LpProblem("Optimal Values",LpMaximize)
speed_vars = LpVariable("Variable",df.speed,lowBound=0,cat='Integer')
prob += lpSum(df.new_column_final)
prob.solve()
以下是我得到的错误:
speed_vars = LpVariable("变量",df.speed,lowBound=0,cat='Integer') TypeError: init() 为参数 'lowBound' 获得了多个值
非常感谢您的帮助。任何帮助将不胜感激!
【问题讨论】:
-
“优化一列数据”是什么意思?
-
对不起 - 我的意思是我希望该列的每一行中的数据/值成为最佳/最佳选择,以使该行成为最高值并且所有行的总和成为可能的最高值。
-
您能否提供minimal reproducible example - 基本上是一个玩具问题,其中包含您问题中代码中所需的所有数据,其中答案是显而易见的。这使人们更容易回答,您可以将该方法扩展/应用到更大/更复杂的问题。
-
要添加,请向我们展示当前数据的样本和期望的结果,以更好地说明您的问题。由于人类语言并不总是准确的,因此数字往往比文本中的单词更有帮助。最后,不要假设我们现在您的域就像纸浆一样。
-
感谢 kabdulla 和 Parfait - 相应地进行了简化和编辑