【问题标题】:Python / Pandas / Pulp Optimization DuplicatesPython / Pandas / Pulp 优化重复
【发布时间】:2018-06-25 20:57:40
【问题描述】:

我正在尝试优化空间有限的试用成员的分组/选择,但遇到了一些麻烦。我已经准备好进行优化的 pandas 数据帧,并且可以毫无问题地运行线性优化,除了我需要添加一个约束。我正在尝试使用二进制文件进行选择(但出于任何原因,我并不依赖于此,所以如果用不同的方法解决这个问题,我可以切换)从一个大列表中。我需要尽量减少下一轮试验中选择的组合试验时间,但由于实验的性质,一些受试者已经进行了多次试验。我想根据最小化时间选择最佳主题组合,但允许某些主题多次出现在列表中以进行优化(因此我不必事先手动删除它们)。例如:

Name         Trial    ID       Time (ms)    Selected?
Mary Smith   A        11001    33           1
John Doe     A        11002    24           0
James Smith  B        11003    52           0
Stacey Doe   A        11004    21           1
John Doe     B        11002    19           1

是否有某种方法可以允许 2 个 John Doe 条目进行优化,但将输出限制为仅他的一个选择?感谢您的宝贵时间!

【问题讨论】:

  • 您不必“手动”删除它们。您可以只使用df.sort_values(['Name', 'Time (ms)']).drop_duplicates('Name'),然后每个人的时间最短。
  • 对,对不起,我想我应该澄清一下。由于试验和数据集的性质,我需要记录每个试验的删除,所以即使我可以放弃差的分数,我也必须手动记录,这将是非常耗时的。所以我认为我主要受制于这种纸浆格式。
  • 这是我在pulp 中的做法:使用熊猫我会识别每个重复的主题(Joe Doe。)对于每个这样的主题,您需要添加一个 0/​​1(二进制)多变的。最后,添加这些变量的 SOS(特殊排序集),每个重复主题一个约束。 y_JD1 + y_JD2 <= 1 强制输出至多是这个主题之一。

标签: python pandas optimization pulp


【解决方案1】:

如果您需要记录所有要删除的值,可以使用duplicated 函数,像这样

# First sort your dataframe
df.sort_values(['Name', 'Time (ms)'], inplace=True)

# Make a new column of duplicated values based only on name
df['duplicated'] = df.duplicated(subset=['Name'])

# You can then access the duplicates, but still have a log of the rejects
df.query('not duplicated')
#           Name Trial     ID  Time (ms)  Selected?  duplicated
# 2  James Smith     B  11003         52          0       False
# 1     John Doe     A  11002         24          0       False
# 0   Mary Smith     A  11001         33          1       False
# 3   Stacey Doe     A  11004         21          1       False

df.query('duplicated')
#        Name Trial     ID  Time (ms)  Selected?  duplicated
# 4  John Doe     B  11002         19          1        True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    相关资源
    最近更新 更多