Дубликаты оптимизации Python / Pandas / Pulp - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь оптимизировать группировку / выбор пробных участников с ограниченным пространством, и у меня возникли некоторые проблемы.У меня есть готовые для оптимизации фреймы данных 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 записи Джона Доу для оптимизации, но ограничить вывод только одним его выбором?Спасибо за ваше время!

1 Ответ

0 голосов
/ 26 июня 2018

Если вам необходимо записать все значения, которые вы хотите удалить, вы можете использовать функцию 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
...