Я пытаюсь пройтись по фрейму данных pandas, чтобы выполнить определенные условия в задаче оптимизации.
Позвольте мне предоставить некоторые фоны и то, что я сделал до сих пор.
Итак, в таблице ниже приведены мои первые 10 строк моих входных данных (названные df_long
) после загрузки и плавления с помощью панд. У меня есть 150 строк в моем фактическом наборе данных.
Hour TypeofTask TaskFrequency TotalTaskatSpecific Hour
0 08 A 5 50
1 09 D 8 30
2 08 D 7 50
3 10 C 4 20
4 09 B 6 30
5 08 B 9 50
6 10 A 2 20
7 09 D 1 30
8 08 C 3 50
9 08 E 2 50
10 09 A 7 30
Я также создал переменные решения, т. Е. X0, x1, x2, ..... xn для каждой строки вышеуказанных входных данных, установленных выше, используя циклутверждения, как показано ниже;
decision_variables = []
for rownum, row in df_long.iterrows():
variable = str('x' + str(rownum))
variable = pulp.LpVariable(str(variable), lowBound = 0, cat= 'Integer')
decision_variables.append(variable)
Мой актуальный вопрос ..
Я хочу иметь возможность циклически проходить через фрейм данных панд, чтобы найти все TaskFrequency , что произошло в определенный час, а затем умножьте каждую TaskFrequency на соответствующую переменную решения для каждой строки - все выражение должно быть меньше или равно TotalTaskatSpecificHour для определенного часа, например, выражение, подобное этому дляЧас 10 будет:
4*x3 + 2*x6 <= 20
До сих пор я был в состоянии сделать это:
to = ""
for rownum, row in df_long.iterrows():
for i, wo in enumerate(decision_variables):
if rownum == i:
formula = row['TaskFrequency']*wo
to += formula
prob += to
это дало мне:
5*x0 + 8*x1 + 7*x2 + 4*x3 + 6*x4 + 9*x5 + 2*x6 + 1*x7 +3*x8 + 2*x9 + 7*x10
Я также пробовал это:
for rownum, row in df_long.iterrows():
for i, wo in enumerate(decision_variables):
for x,y,z in zip(df_long['Hour'],df_long['TypeofTask'],df_long['TaskFrequency']):
if rownum == i:
formula1 = row['TaskFrequency']*wo
Я просто получаю 7 * x10
, что я хочу получить это то же выражение, но для конкретного Час вместо всего этого, например, для Часа 10 это должно быть,
4*x3 + 2*x6 <= 20
для 9-го часа должно быть,
8*x1 + 6*x4 + 1*x7 + 7*x10 <= 30
Я с нетерпением жду ваших предложений и помощи.
С уважением
Дива