如何使用for循环将3d字典转换为一系列2D数据帧?

2024-09-30 16:24:13 发布

您现在位置:Python中文网/ 问答频道 /正文

下午好, 我有一个数学模型来模拟不同生产设施的网络。到目前为止,我已经帮助自己进行2d数据可视化,为每个位置构建单独的数据帧

PQ1=pd.DataFrame()
for p_m in VAR1: # sales
    PQ1.loc[p_m,'Volume'] = round(model.calc['P01',p_m](), 2)
    PQ1.loc[p_m,'Quality'] = sum(model.mix3['P01',b_n,p_m]()*mix[b_n][p_m]*q[b_n]['Quality'] for b_n in 
    MIX)/ PQ1.loc[p_m,'Volume']
    ...
PQ2 = pd.DataFrame() 
for p_m in VAR1: # sales
    PQ2.loc[p_m,'Volume'] = round(model.prods['P02',p_m](), 2)...

然后绘制或导出各个帧的数据。如果您只有2或3个位置,这是很好的。 我正在寻找一种更聪明的方法,在这里我可以设置一个for循环,如:

for l_c in LOCATIONS:
   for p_m in VAR1:
       PQ[l_c].loc[p_m,'Volume'] = round(model.calc[l_c,p_m](),2)
       PQ[l_c].loc[p_m,'Quality'] = sum(model.mix3[l_c,b_n,p_m]()*mix[b_n][p_m]*q[b_n]['Quality']\
       for b_n in MIX)/ PQ[l_c].loc[p_m,'Volume']

因此,我可以随后使用for循环来可视化/导出数据。 构建三维数据帧很简单,但是创建之后,我很难将其转换回所需的三维数据帧。我可以用PQ[l_c,p_m,'Volume']来处理数据,并创建所需的2d位置特定数据帧

提前感谢您的帮助。 当做 p


有关当前输出外观的更多信息: example output dataframe。目前,它们都是手动生成的。从pyomo计算中获取数据。但是,我希望更灵活地向模型添加更高的分辨率,从而拥有专家所称的更多位置或节点。因此,如果我能用for循环切片和切割多维pyomo数据来生成这些二维表,这将对可视化非常有帮助。 如果我必须把它框得更科学一点:我有一个pyomo模型的结果,它产生了一个由1000个离散值组成的优化输出,我想循环其中的一些值,产生一系列的二维输出x,f(x),然后我可以在matplotlib中用条形图或折线图进行可视化。如示例中所示,我目前必须手动修复“P01”,然后只能显示具有定义的“质量”的不同产品p_m的值。当我尝试在多个“P0i”上循环时,它会生成一条错误消息:

KeyError: "None of [Index(['P01', 'Product1', 'Volume'], dtype='object')] are in the [index]"

Tags: 数据informodel可视化locpyomopd