From 80642ae9af56a998d7baa35eec21e2fbc5b4082d Mon Sep 17 00:00:00 2001 From: Tom Brown Date: Fri, 6 Dec 2019 16:56:33 +0100 Subject: [PATCH] Fix post-processing to read nomopyomo nc; fix MultiIndex issue With new pandas: pd.Index([])|pd.MultiIndex(...) returns a pd.Index, not a pd.MultiIndex, so just reversed: pd.MultiIndex(...)|pd.Index([]) This returns a pd.MultiIndex. --- scripts/make_summary.py | 32 +++++++++++++++++--------------- scripts/plot_network.py | 3 +++ 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/scripts/make_summary.py b/scripts/make_summary.py index cf4f40ce..acd749f4 100644 --- a/scripts/make_summary.py +++ b/scripts/make_summary.py @@ -36,6 +36,8 @@ override_component_attrs["Link"].loc["efficiency2"] = ["static or series","per u override_component_attrs["Link"].loc["efficiency3"] = ["static or series","per unit",1.,"3rd bus efficiency","Input (optional)"] override_component_attrs["Link"].loc["p2"] = ["series","MW",0.,"2nd bus output","Output"] override_component_attrs["Link"].loc["p3"] = ["series","MW",0.,"3rd bus output","Output"] +override_component_attrs["StorageUnit"].loc["p_dispatch"] = ["series","MW",0.,"Storage discharging.","Output"] +override_component_attrs["StorageUnit"].loc["p_store"] = ["series","MW",0.,"Storage charging.","Output"] @@ -77,7 +79,7 @@ def calculate_nodal_cfs(n,label,nodal_cfs): cf_c = p_c/capacities_c index = pd.MultiIndex.from_tuples([(c.list_name,) + t for t in cf_c.index.to_list()]) - nodal_cfs = nodal_cfs.reindex(nodal_cfs.index|index) + nodal_cfs = nodal_cfs.reindex(index|nodal_cfs.index) nodal_cfs.loc[index,label] = cf_c.values return nodal_cfs @@ -102,7 +104,7 @@ def calculate_cfs(n,label,cfs): cf_c = p_c/capacities_c - cfs = cfs.reindex(cfs.index|pd.MultiIndex.from_product([[c.list_name],cf_c.index])) + cfs = cfs.reindex(pd.MultiIndex.from_product([[c.list_name],cf_c.index])|cfs.index) cfs.loc[idx[c.list_name,list(cf_c.index)],label] = cf_c.values @@ -116,7 +118,7 @@ def calculate_nodal_costs(n,label,nodal_costs): for c in n.iterate_components(n.branch_components|n.controllable_one_port_components^{"Load"}): capital_costs = (c.df.capital_cost*c.df[opt_name.get(c.name,"p") + "_nom_opt"]).groupby((c.df.location,c.df.carrier)).sum() index = pd.MultiIndex.from_tuples([(c.list_name,"capital") + t for t in capital_costs.index.to_list()]) - nodal_costs = nodal_costs.reindex(nodal_costs.index|index) + nodal_costs = nodal_costs.reindex(index|nodal_costs.index) nodal_costs.loc[index,label] = capital_costs.values if c.name == "Link": @@ -137,7 +139,7 @@ def calculate_nodal_costs(n,label,nodal_costs): marginal_costs = (p*c.df.marginal_cost).groupby((c.df.location,c.df.carrier)).sum() index = pd.MultiIndex.from_tuples([(c.list_name,"marginal") + t for t in marginal_costs.index.to_list()]) - nodal_costs = nodal_costs.reindex(nodal_costs.index|index) + nodal_costs = nodal_costs.reindex(index|nodal_costs.index) nodal_costs.loc[index,label] = marginal_costs.values return nodal_costs @@ -149,7 +151,7 @@ def calculate_costs(n,label,costs): capital_costs = c.df.capital_cost*c.df[opt_name.get(c.name,"p") + "_nom_opt"] capital_costs_grouped = capital_costs.groupby(c.df.carrier).sum() - costs = costs.reindex(costs.index|pd.MultiIndex.from_product([[c.list_name],["capital"],capital_costs_grouped.index])) + costs = costs.reindex(pd.MultiIndex.from_product([[c.list_name],["capital"],capital_costs_grouped.index])|costs.index) costs.loc[idx[c.list_name,"capital",list(capital_costs_grouped.index)],label] = capital_costs_grouped.values @@ -173,7 +175,7 @@ def calculate_costs(n,label,costs): marginal_costs_grouped = marginal_costs.groupby(c.df.carrier).sum() - costs = costs.reindex(costs.index|pd.MultiIndex.from_product([[c.list_name],["marginal"],marginal_costs_grouped.index])) + costs = costs.reindex(pd.MultiIndex.from_product([[c.list_name],["marginal"],marginal_costs_grouped.index])|costs.index) costs.loc[idx[c.list_name,"marginal",list(marginal_costs_grouped.index)],label] = marginal_costs_grouped.values @@ -198,7 +200,7 @@ def calculate_nodal_capacities(n,label,nodal_capacities): for c in n.iterate_components(n.branch_components|n.controllable_one_port_components^{"Load"}): nodal_capacities_c = c.df[opt_name.get(c.name,"p") + "_nom_opt"].groupby((c.df.location,c.df.carrier)).sum() index = pd.MultiIndex.from_tuples([(c.list_name,) + t for t in nodal_capacities_c.index.to_list()]) - nodal_capacities = nodal_capacities.reindex(nodal_capacities.index|index) + nodal_capacities = nodal_capacities.reindex(index|nodal_capacities.index) nodal_capacities.loc[index,label] = nodal_capacities_c.values return nodal_capacities @@ -211,7 +213,7 @@ def calculate_capacities(n,label,capacities): for c in n.iterate_components(n.branch_components|n.controllable_one_port_components^{"Load"}): capacities_grouped = c.df[opt_name.get(c.name,"p") + "_nom_opt"].groupby(c.df.carrier).sum() - capacities = capacities.reindex(capacities.index|pd.MultiIndex.from_product([[c.list_name],capacities_grouped.index])) + capacities = capacities.reindex(pd.MultiIndex.from_product([[c.list_name],capacities_grouped.index])|capacities.index) capacities.loc[idx[c.list_name,list(capacities_grouped.index)],label] = capacities_grouped.values @@ -238,7 +240,7 @@ def calculate_energy(n,label,energy): for port in [col[3:] for col in c.df.columns if col[:3] == "bus"]: c_energies -= c.pnl["p"+port].multiply(n.snapshot_weightings,axis=0).sum().groupby(c.df.carrier).sum() - energy = energy.reindex(energy.index|pd.MultiIndex.from_product([[c.list_name],c_energies.index])) + energy = energy.reindex(pd.MultiIndex.from_product([[c.list_name],c_energies.index])|energy.index) energy.loc[idx[c.list_name,list(c_energies.index)],label] = c_energies.values @@ -267,7 +269,7 @@ def calculate_supply(n,label,supply): s = c.pnl.p[items].max().multiply(c.df.loc[items,'sign']).groupby(c.df.loc[items,'carrier']).sum() - supply = supply.reindex(supply.index|pd.MultiIndex.from_product([[i],[c.list_name],s.index])) + supply = supply.reindex(pd.MultiIndex.from_product([[i],[c.list_name],s.index])|supply.index) supply.loc[idx[i,c.list_name,list(s.index)],label] = s.values @@ -283,7 +285,7 @@ def calculate_supply(n,label,supply): #lots of sign compensation for direction and to do maximums s = (-1)**(1-int(end))*((-1)**int(end)*c.pnl["p"+end][items]).max().groupby(c.df.loc[items,'carrier']).sum() - supply = supply.reindex(supply.index|pd.MultiIndex.from_product([[i],[c.list_name],s.index])) + supply = supply.reindex(pd.MultiIndex.from_product([[i],[c.list_name],s.index])|supply.index) supply.loc[idx[i,c.list_name,list(s.index)],label] = s.values return supply @@ -310,7 +312,7 @@ def calculate_supply_energy(n,label,supply_energy): s = c.pnl.p[items].sum().multiply(c.df.loc[items,'sign']).groupby(c.df.loc[items,'carrier']).sum() - supply_energy = supply_energy.reindex(supply_energy.index|pd.MultiIndex.from_product([[i],[c.list_name],s.index])) + supply_energy = supply_energy.reindex(pd.MultiIndex.from_product([[i],[c.list_name],s.index])|supply_energy.index) supply_energy.loc[idx[i,c.list_name,list(s.index)],label] = s.values @@ -325,14 +327,14 @@ def calculate_supply_energy(n,label,supply_energy): s = (-1)*c.pnl["p"+end][items].sum().groupby(c.df.loc[items,'carrier']).sum() - supply_energy = supply_energy.reindex(supply_energy.index|pd.MultiIndex.from_product([[i],[c.list_name],s.index])) + supply_energy = supply_energy.reindex(pd.MultiIndex.from_product([[i],[c.list_name],s.index])|supply_energy.index) supply_energy.loc[idx[i,c.list_name,list(s.index)],label] = s.values return supply_energy def calculate_metrics(n,label,metrics): - metrics = metrics.reindex(metrics.index|pd.Index(["line_volume","line_volume_limit","line_volume_AC","line_volume_DC","line_volume_shadow","co2_shadow"])) + metrics = metrics.reindex(pd.Index(["line_volume","line_volume_limit","line_volume_AC","line_volume_DC","line_volume_shadow","co2_shadow"])|metrics.index) metrics.at["line_volume_DC",label] = (n.links.length*n.links.p_nom_opt)[n.links.carrier == "DC"].sum() metrics.at["line_volume_AC",label] = (n.lines.length*n.lines.s_nom_opt).sum() @@ -402,7 +404,7 @@ def calculate_weighted_prices(n,label,weighted_prices): if names.empty: continue - load += n.links_t.p0[names].groupby(n.links.loc[names,"bus0"],axis=1).sum(axis=1) + load += n.links_t.p0[names].groupby(n.links.loc[names,"bus0"],axis=1).sum() #Add H2 Store when charging #if carrier == "H2": diff --git a/scripts/plot_network.py b/scripts/plot_network.py index c185b597..3ace38d4 100644 --- a/scripts/plot_network.py +++ b/scripts/plot_network.py @@ -32,6 +32,9 @@ override_component_attrs["Link"].loc["efficiency2"] = ["static or series","per u override_component_attrs["Link"].loc["efficiency3"] = ["static or series","per unit",1.,"3rd bus efficiency","Input (optional)"] override_component_attrs["Link"].loc["p2"] = ["series","MW",0.,"2nd bus output","Output"] override_component_attrs["Link"].loc["p3"] = ["series","MW",0.,"3rd bus output","Output"] +override_component_attrs["StorageUnit"].loc["p_dispatch"] = ["series","MW",0.,"Storage discharging.","Output"] +override_component_attrs["StorageUnit"].loc["p_store"] = ["series","MW",0.,"Storage charging.","Output"] + def rename_techs_tyndp(tech):