python - 查找最大化一列总和同时限制另一列总和的数据帧行的子集

标签 python algorithm pandas numpy data-science

作为 pandas 和 python 的初学者,我试图在数据框中找到选择的 10 行,以满足以下要求:

  1. 分类列中每个类别只有 1 个
  2. 最大化一列的总和
  3. 同时将另一列的总和保持在指定阈值以下

我纠结的概念是如何同时完成所有这些。在这种情况下,目标是选择 10 行,得到一个子集,其中 OPW 的总和最大化,而 salary 的总和保持低于一个整数阈值,POS 中的所有字符串都是唯一的。如果它有助于理解问题,我基本上是想在预算内提出棒球梦之队,OPW 是衡量球员表现和 POS 作为我分配给他们的职位。当前数据框如下所示:

    playerID    OPW        POS  salary
87  bondsba01   62.061290   OF  8541667
439 heltoto01   41.002660   1B  10600000
918 thomafr04   38.107000   1B  7000000
920 thomeji01   37.385272   1B  6337500
68  berkmla01   36.210367   1B  10250000
785 ramirma02   35.785630   OF  13050000
616 martied01   32.906884   3B  3500000
775 pujolal01   32.727629   1B  13870949
966 walkela01   30.644305   OF  6050000
354 giambja01   30.440007   1B  3103333
859 sheffga01   29.090699   OF  9916667
511 jonesch06   28.383418   3B  10833333
357 gilesbr02   28.160054   OF  7666666
31  bagweje01   27.133545   1B  6875000
282 edmonji01   23.486406   CF  4500000
0   abreubo01   23.056375   RF  9000000
392 griffke02   22.965706   OF  8019599
       ...    ...        ...     ...

如果我的团队只有 3 个人,分别是 OF1B3B,并且我有总和的薪水 阈值为 19,100,000 美元,我会得到以下团队:

    playerID    OPW        POS  salary
 87 bondsba01   62.061290   OF  8541667
918 thomafr04   38.107000   1B  7000000
616 martied01   32.906884   3B  3500000

理想情况下,输出将是另一个数据框,其中只有 10 行满足要求。我能想到的唯一解决方案是引导一堆团队(10 行),每行都有一个唯一的 POS,删除高于“薪水”总和阈值的团队,然后 sort_value( )df.OPW.sum() 组成的团队。虽然不确定如何实现。也许有更优雅的方法来做到这一点? 编辑:更改数据框以提供更多信息,添加更多上下文。

最佳答案

这是一个线性规划问题。对于每个 POS,您试图最大化个人 OPW,而整个团队的总薪水受到约束。你不能用简单的 pandas 操作来解决这个问题,但是 PuLP可用于制定和解决它(有关示例,请参阅此处的案例研究)。

但是,您可以通过使用 pandas 按 POS 分组(或排序)然后(1)按 OPW 降序和薪水升序排序,或(2)添加某种“返回”来更接近手动解决方案投资”列(OPW 除以薪水,也许)并按降序排序以找到在每个位置上能给你带来最大 yield 的球员。

关于python - 查找最大化一列总和同时限制另一列总和的数据帧行的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39951768/

相关文章:

python - 从 Pandas 数据框中的现有数据创建一个新变量

python - 在图像中绘制隐式函数(Python,[OpenCV])

python - 绘制 Pandas 数据框的特定行

algorithm - 坐在电影院里的人

android - 音频滤波器算法

python - 过期缓存的最优算法

python-3.x - 如何从电影数据集中提取用户评分

python - 自定义 Tensorflow 数据集的类型规范

python - 根据特定元素拆分具有多个列表的列表

python - Pandas read_fwf : specify dtype