【问题标题】:Python, Pandas, Pyomo change shape according to indexPython、Pandas、Pyomo 根据索引改变形状
【发布时间】:2018-06-13 16:02:42
【问题描述】:

我已经编写了一个优化模型,现在我想为不同的变量生成一些输出文件 (xlsx)。我已使用以下代码将变量的全部数据放在一个 DataFrame 中:

block_vars = []
for var in model.component_data_objects(Var):
    block_vars.append(var.parent_component())
block_vars = list(set(block_vars))
dc = {(str(bv).split('.')[0], str(bv).split('.')[-1], i): bv[i].value for bv in block_vars for i in getattr(bv, '_index')}
df = pd.DataFrame(list(dc.items()), columns=['tuple','value'])
df['variable_name'] = df['tuple'].str[-2]
df['variable_index'] = df['tuple'].str[-1]
df.drop('tuple', axis=1, inplace=True)

这很好用(尽管它可能不是最流畅的方式。

现在我用一个块过滤不同的变量,如下所示:

writer = pd.ExcelWriter('UC.xlsx')
conditions = {'variable_name':'vCommit'}
df_uc = df.copy()
df_uc = df_uc[(df_uc[list(conditions)] == pd.Series(conditions)).all(axis=1)].drop('variable_name', 1)
df_uc.to_excel(writer, 'Tabelle1')

这也有效。现在是我正在努力的部分。 这些变量被索引(有 2 或 3 个索引,具体取决于变量),我希望输出如下:

index1    index2    value
1         1         1
1         2         0
...

但是这些索引在 DataFrame 的一行中的一个元组中,我不确定如何访问它们并相应地重塑 DataFrame。 有人知道这样做的方法吗?谢谢你的帮助!!!

【问题讨论】:

    标签: python pandas pyomo


    【解决方案1】:

    在第一次创建 DataFrame 时,我会将索引扩展为多列。您可以尝试查看这里的代码以获得灵感:https://github.com/gseastream/pyomo/blob/fa9b8f20a0f9afafa7cbd4607baa8b4963a96f42/pyomo/repn/plugins/excel_writer.py

    Grant 正在开发 Excel 界面,但开发重点转移到了其他地方。

    另外,请注意:您可以使用 model.component_objects(Var) 代替 list(set(block_vars)) 所拥有的。

    【讨论】:

      猜你喜欢
      • 2020-04-01
      • 2016-12-30
      • 2019-02-02
      • 2016-10-17
      • 1970-01-01
      • 2020-09-26
      • 2021-06-09
      • 2019-04-06
      • 2016-10-10
      相关资源
      最近更新 更多