Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -602,13 +602,8 @@ elif modus == "Upload csv-Datei":
|
|
| 602 |
}
|
| 603 |
for col in hsystem_colnames:
|
| 604 |
df_out[col] = df_out[col].replace(heizsystem_namensmap)
|
| 605 |
-
|
| 606 |
-
# Übersicht Platz 1-Lösungen
|
| 607 |
-
guenstigste_namen = df_out["Heizsystem_Name_1"].value_counts()
|
| 608 |
-
summary_str = "Günstigste Lösung: " + ", ".join([f"{name} ({count})" for name, count in guenstigste_namen.items()])
|
| 609 |
-
|
| 610 |
st.success("Berechnung abgeschlossen!")
|
| 611 |
-
st.info(summary_str)
|
| 612 |
|
| 613 |
if annuitaeten_gesamt:
|
| 614 |
# Verbinde alle Einzel-DFs zu einem großen Table
|
|
@@ -657,6 +652,41 @@ elif modus == "Upload csv-Datei":
|
|
| 657 |
file_name="heizsysteme_batch_ergebnis.csv",
|
| 658 |
mime="text/csv"
|
| 659 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 660 |
except Exception as e:
|
| 661 |
st.error(f"Fehler beim Einlesen/Berechnen: {e}")
|
| 662 |
|
|
|
|
| 602 |
}
|
| 603 |
for col in hsystem_colnames:
|
| 604 |
df_out[col] = df_out[col].replace(heizsystem_namensmap)
|
| 605 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
| 606 |
st.success("Berechnung abgeschlossen!")
|
|
|
|
| 607 |
|
| 608 |
if annuitaeten_gesamt:
|
| 609 |
# Verbinde alle Einzel-DFs zu einem großen Table
|
|
|
|
| 652 |
file_name="heizsysteme_batch_ergebnis.csv",
|
| 653 |
mime="text/csv"
|
| 654 |
)
|
| 655 |
+
# Nach dem Batch, nach dem Download-Button usw.:
|
| 656 |
+
if annuitaeten_objekt_map:
|
| 657 |
+
objekt_ids = list(annuitaeten_objekt_map.keys())
|
| 658 |
+
select_id = st.selectbox("Objekt für Detaildarstellung auswählen", objekt_ids)
|
| 659 |
+
if select_id and select_id in annuitaeten_objekt_map:
|
| 660 |
+
df_einzel = annuitaeten_objekt_map[select_id]
|
| 661 |
+
# Für Einzelchart gestapelt:
|
| 662 |
+
df_stacked = df_einzel[["Name", "Annuität_NK", "Annuität_NV", "Annuität_NB"]].melt(
|
| 663 |
+
id_vars="Name",
|
| 664 |
+
value_vars=["Annuität_NK", "Annuität_NV", "Annuität_NB"],
|
| 665 |
+
var_name="Kostenart",
|
| 666 |
+
value_name="Wert"
|
| 667 |
+
)
|
| 668 |
+
df_stacked["Kostenart"] = df_stacked["Kostenart"].replace({
|
| 669 |
+
"Annuität_NK": "Kapitalgebundene Kosten",
|
| 670 |
+
"Annuität_NV": "Bedarfsgebundene Kosten",
|
| 671 |
+
"Annuität_NB": "Betriebsgebundene Kosten"
|
| 672 |
+
})
|
| 673 |
+
kostenart_order = ["Kapitalgebundene Kosten", "Bedarfsgebundene Kosten", "Betriebsgebundene Kosten"]
|
| 674 |
+
df_stacked["Kostenart"] = pd.Categorical(df_stacked["Kostenart"], categories=kostenart_order, ordered=True)
|
| 675 |
+
color_scale = alt.Scale(domain=kostenart_order, range=["#00386c", "#004c93", "#0069c8"])
|
| 676 |
+
sortierte_names = df_einzel.sort_values("Annuität")["Name"]
|
| 677 |
+
|
| 678 |
+
st.markdown(f"#### Annualisierte Kosten für Objekt {select_id}")
|
| 679 |
+
st.altair_chart(
|
| 680 |
+
alt.Chart(df_stacked)
|
| 681 |
+
.mark_bar()
|
| 682 |
+
.encode(
|
| 683 |
+
x=alt.X("Wert:Q", title="Annualisierte Kosten (€)", stack="zero"),
|
| 684 |
+
y=alt.Y("Name:N", title="Heizsystem", sort=list(sortierte_names)),
|
| 685 |
+
color=alt.Color("Kostenart:N", scale=color_scale, title="Kostenart"),
|
| 686 |
+
tooltip=["Name", "Kostenart", "Wert"]
|
| 687 |
+
).properties(height=350, width=650),
|
| 688 |
+
use_container_width=True
|
| 689 |
+
)
|
| 690 |
except Exception as e:
|
| 691 |
st.error(f"Fehler beim Einlesen/Berechnen: {e}")
|
| 692 |
|