Tobi-ewl commited on
Commit
e13f91b
·
verified ·
1 Parent(s): fc94057

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -0
app.py CHANGED
@@ -515,6 +515,9 @@ elif modus == "Upload csv-Datei":
515
  st.session_state.batch_user_values = batch_user_values
516
  else:
517
  st.session_state.batch_user_values = None
 
 
 
518
 
519
  do_calc = st.button("Batch-Berechnung starten")
520
  if do_calc:
@@ -578,6 +581,13 @@ elif modus == "Upload csv-Datei":
578
  df["Annuität_NS"] = 0
579
  df["Annuität"] = df["Annuität_NK"] + df["Annuität_NV"] + df["Annuität_NB"] + df["Annuität_NS"]
580
  df = df.sort_values("Annuität")
 
 
 
 
 
 
 
581
  for j in range(min(len(df), max_count)):
582
  df_out.at[idx, annuität_colnames[j]] = int(df.iloc[j]["Annuität"])
583
  df_out.at[idx, hsystem_colnames[j]] = df.iloc[j]["Name"]
@@ -599,6 +609,44 @@ elif modus == "Upload csv-Datei":
599
 
600
  st.success("Berechnung abgeschlossen!")
601
  st.info(summary_str)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
602
 
603
  csv_buffer = io.StringIO()
604
  df_out.to_csv(csv_buffer, sep=";", index=False)
 
515
  st.session_state.batch_user_values = batch_user_values
516
  else:
517
  st.session_state.batch_user_values = None
518
+
519
+ annuitaeten_gesamt = []
520
+ annuitaeten_objekt_map = {}
521
 
522
  do_calc = st.button("Batch-Berechnung starten")
523
  if do_calc:
 
581
  df["Annuität_NS"] = 0
582
  df["Annuität"] = df["Annuität_NK"] + df["Annuität_NV"] + df["Annuität_NB"] + df["Annuität_NS"]
583
  df = df.sort_values("Annuität")
584
+ df_anni = df[[
585
+ "Name", "Annuität_NK", "Annuität_NV", "Annuität_NB", "Annuität"
586
+ ]].copy()
587
+ df_anni["Objekt-ID"] = row.get("Objekt-ID", idx)
588
+ annuitaeten_gesamt.append(df_anni)
589
+ annuitaeten_objekt_map[str(row.get("Objekt-ID", idx))] = df_anni
590
+
591
  for j in range(min(len(df), max_count)):
592
  df_out.at[idx, annuität_colnames[j]] = int(df.iloc[j]["Annuität"])
593
  df_out.at[idx, hsystem_colnames[j]] = df.iloc[j]["Name"]
 
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
615
+ df_alle = pd.concat(annuitaeten_gesamt, ignore_index=True)
616
+ # Mittelwerte pro System
617
+ df_mittel = df_alle.groupby("Name")[["Annuität_NK", "Annuität_NV", "Annuität_NB", "Annuität"]].mean(numeric_only=True).reset_index()
618
+
619
+ # Für gestapeltes Balkendiagramm (wie im Einzel-Modus)
620
+ df_stacked = df_mittel.melt(
621
+ id_vars="Name",
622
+ value_vars=["Annuität_NK", "Annuität_NV", "Annuität_NB"],
623
+ var_name="Kostenart",
624
+ value_name="Wert"
625
+ )
626
+ df_stacked["Kostenart"] = df_stacked["Kostenart"].replace({
627
+ "Annuität_NK": "Kapitalgebundene Kosten",
628
+ "Annuität_NV": "Bedarfsgebundene Kosten",
629
+ "Annuität_NB": "Betriebsgebundene Kosten"
630
+ })
631
+ kostenart_order = ["Kapitalgebundene Kosten", "Bedarfsgebundene Kosten", "Betriebsgebundene Kosten"]
632
+ df_stacked["Kostenart"] = pd.Categorical(df_stacked["Kostenart"], categories=kostenart_order, ordered=True)
633
+ color_scale = alt.Scale(domain=kostenart_order, range=["#00386c", "#004c93", "#0069c8"])
634
+
635
+ # Heizsysteme nach mittlerer Gesamtkosten sortieren
636
+ sortierte_names = df_mittel.sort_values("Annuität")["Name"]
637
+
638
+ st.markdown("### Mittlere annualisierte Kosten pro Heizsystem (Batch-Durchschnitt)")
639
+ st.altair_chart(
640
+ alt.Chart(df_stacked)
641
+ .mark_bar()
642
+ .encode(
643
+ x=alt.X("Wert:Q", title="mittlere annualisierte Kosten (€)", stack="zero"),
644
+ y=alt.Y("Name:N", title="Heizsystem", sort=list(sortierte_names)),
645
+ color=alt.Color("Kostenart:N", scale=color_scale, title="Kostenart"),
646
+ tooltip=["Name", "Kostenart", "Wert"]
647
+ ).properties(height=350, width=650),
648
+ use_container_width=True
649
+ )
650
 
651
  csv_buffer = io.StringIO()
652
  df_out.to_csv(csv_buffer, sep=";", index=False)