Fix more pandas Index issues in make_summary.

This commit is contained in:
euronion 2019-10-24 10:53:07 +02:00 committed by GitHub
parent dfc0242a2d
commit a401d80300
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -37,14 +37,14 @@ def calculate_costs(n,label,costs):
for c in n.iterate_components(n.branch_components|n.controllable_one_port_components^{"Load"}): 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"] 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() capital_costs_grouped = capital_costs.groupby(c.df.carrier).sum()
new_index = costs.index|pd.MultiIndex.from_product([[c.list_name],["capital"],capital_costs_grouped.index]) new_index = costs.index|pd.MultiIndex.from_product([[c.list_name],["capital"],capital_costs_grouped.index])
if isinstance(new_index, pd.Index): if isinstance(new_index, pd.Index):
new_index = pd.MultiIndex.from_tuples(new_index) new_index = pd.MultiIndex.from_tuples(new_index)
costs = costs.reindex(new_index) costs = costs.reindex(new_index)
costs.loc[idx[c.list_name,"capital",list(capital_costs_grouped.index)],label] = capital_costs_grouped.values costs.loc[idx[c.list_name, "capital", list(capital_costs_grouped.index)], label] = capital_costs_grouped.values
if c.name == "Link": if c.name == "Link":
p = c.pnl.p0.multiply(n.snapshot_weightings,axis=0).sum() p = c.pnl.p0.multiply(n.snapshot_weightings,axis=0).sum()
@ -90,7 +90,12 @@ def calculate_energy(n,label,energy):
return energy return energy
def include_in_summary(summary, multiindexprefix, label, item): def include_in_summary(summary, multiindexprefix, label, item):
summary = summary.reindex(summary.index | pd.MultiIndex.from_product([[p] for p in multiindexprefix] + [item.index]))
new_index = summary.index | pd.MultiIndex.from_product([[p] for p in multiindexprefix] + [item.index])
if isinstance(new_index, pd.Index):
new_index = pd.MultiIndex.from_tuples(new_index)
summary = summary.reindex(new_index)
summary.loc[idx[tuple(multiindexprefix + [list(item.index)])], label] = item.values summary.loc[idx[tuple(multiindexprefix + [list(item.index)])], label] = item.values
return summary return summary
@ -133,7 +138,11 @@ 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() 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])) new_index = supply.index|pd.MultiIndex.from_product([[i],[c.list_name],s.index])
if isinstance(new_index, pd.Index):
new_index = pd.MultiIndex.from_tuples(new_index)
supply = supply.reindex(new_index)
supply.loc[idx[i,c.list_name,list(s.index)],label] = s.values supply.loc[idx[i,c.list_name,list(s.index)],label] = s.values
@ -176,7 +185,11 @@ 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() 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])) new_index = supply_energy.index|pd.MultiIndex.from_product([[i],[c.list_name],s.index])
if isinstance(new_index, pd.Index):
new_index = pd.MultiIndex.from_tuples(new_index)
supply_energy = supply_energy.reindex(new_index)
supply_energy.loc[idx[i,c.list_name,list(s.index)],label] = s.values supply_energy.loc[idx[i,c.list_name,list(s.index)],label] = s.values
@ -426,7 +439,7 @@ if __name__ == "__main__":
for opts in expand_from_wildcard("opts")} for opts in expand_from_wildcard("opts")}
print(networks_dict) print(networks_dict)
dfs = make_summaries(networks_dict, country=snakemake.wildcards.country) dfs = make_summaries(networks_dict, country=snakemake.wildcards.country)
to_csv(dfs) to_csv(dfs)