我的问题:尝试将输出变量拆分为大小相似的数据框并合并它们。
模型输出:“ var”
{('Product1',0): <gurobi.Var listing[Product1,0] (value 1.0)>,('Product1',1): <gurobi.Var listing[Product1,1] (value 0.0)>,2): <gurobi.Var listing[Product1,2] (value 0.0)>,3): <gurobi.Var listing[Product1,3] (value 0.0)>,('Product2',0): <gurobi.Var listing[Product2,1): <gurobi.Var listing[Product2,2): <gurobi.Var listing[Product2,3): <gurobi.Var listing[Product2,('Product3',0): <gurobi.Var listing[Product3,1): <gurobi.Var listing[Product3,2): <gurobi.Var listing[Product3,3): <gurobi.Var listing[Product3,3] (value 0.0)>}
<class 'gurobipy.tupledict'>
所需的输出: 所需的输出应如下所示:
0 1 2 3
Product1 1.0 0.0 0.0 0.0
Product2 1.0 0.0 0.0 0.0
Product3 0.0 0.0 0.0 1.0
<class 'pandas.core.frame.DataFrame'>
我(非常手动)尝试:
1)我将输出变量转换为数据框“ df_listing”:
dict_listing = {k : v.X for k,v in var.items()}
df_listing = pd.DataFrame.from_dict(dict_listing,orient='index')
df_listing = df_listing.rename(columns = {0: 'listing'})
listing
(Product1,0) 1.0
(Product1,1) 0.0
(Product1,2) 0.0
(Product1,3) 0.0
(Product2,0) 1.0
(Product2,1) 0.0
(Product2,2) 0.0
(Product2,3) 0.0
(Product3,0) 0.0
(Product3,1) 0.0
(Product3,2) 0.0
(Product3,3) 1.0
<class 'pandas.core.frame.DataFrame'>
2)转置“ df_listing”:
df_listing = df_listing.transpose()
3)使用k,它是列数-在这种情况下为4-> 0,1,2,3
df_Product1 = df_listing.iloc[:,0*k:1*k]
df_Product1.columns = list(range(k))
df_Product2 = df_listing.iloc[:,1*k:2*k]
df_Product2.columns = list(range(k))
df_Product3 = df_listing.iloc[:,2*k:3*k]
df_Product3.columns = list(range(k))
4)连接三个数据框
input = [df_Product1,df_Product2,df_Product3]
df_facingsProductAll = pd.concat(input)
我的尝试是非常手动的,所以我正在寻找a)一种更自动化的解决方案,可能使用for循环,而b)具有更多的动态代码,以使输入可以更多产品,例如5个产品,
感谢您对男孩和女孩的帮助!