Skip to content

Technologiedaten#

Jahresvolllaststunden#

Anhand typischer heutiger und prognostizierter Werte werden folgende Jahresvolllaststunden angenommen:

Technologie Jahr Volllaststunden Quelle(n) für Annahme Anmerkung
Windenergie 2023 1500 Energieportal Brandenburg
2045 2200 PV- und Windflächenrechner
Freiflächen-PV 2023 910 Energieportal Brandenburg, ISE
2045 960 PV- und Windflächenrechner, Ariadne Szenarienreport
Aufdach-PV 2023 750 Energieportal Brandenburg, ISE
2045 910 Ariadne Szenarienreport
Laufwasserkraft 2022 500 Energieportal Brandenburg
2045 500 Energieportal Brandenburg Annahme: Keine Änderung
Bioenergie 2023 6000 Energieportal Brandenburg, ISE Bioenergie-Stromerzeugung (ohne
biogenen Teil des Abfalls)

Datei: technology_data.jsonfull_load_hours

TBD: Generalisieren - automatische Generierung anhand von Global Wind Atlas / Global Solar Atlas.

Leistungsdichte#

Installierbare Leistung pro Fläche / spezifischer Flächenbedarf:

  • Windenergie: 24 MW/km² (Annahme auf Basis von Quelle1 Quelle2, Quelle3)
  • PV-Freiflächenanlagen (flach aufgeständert): 100 MW/km² (Annahme auf Basis von Quelle1 Quelle2)
  • Agri-PV-Anlagen (hoch aufgeständert): 74 MW/km² (Quelle)
  • Agri-PV-Anlagen (vertikal bifazial): 29 MW/km² (Quelle)
  • PV-Aufdachanlagen: 140 MW/km² (Quelle)
  • Solarthermie: - MW/km²

Datei: technology_data.jsonpower_density

Nennleistung Windenergieanlage#

Als Zukunftsanlage für 2045 wird eine Enercon E126 6500 (6,5 MW) angenommen. Diese wird für die Berechnung der Anlagenanzahl in den Ergebnissen verwendet.

Datei: technology_data.jsonnominal_power_per_unit

Batterien#

  • Kleinbatterien/Heimspeicher: Nennkapazität je installierter PV-Peakleistung und Speichernennleistung je installierter Speichernennkapazität aus bnetza_mastr und HTW.
  • Großbatterien: Speichernennleistung je installierter Speichernennkapazität aus bnetza_mastr.

Datei: technology_data.jsonbatteries

Warmwasserspeicher#

  • Kleinwärmespeicher (dezentral): Speichernennleistung je installierter Speichernennkapazität aus DEA
  • Großwärmespeicher (Fernwärme): Speichernennleistung je installierter Speichernennkapazität aus DEA

Datei: technology_data.jsonhot_water_storages

Kosten und Wirkungsgrade#

Datei: raw_costs_efficiencies.csv

Allgemein#

Preise werden aus den Technologie Datenblättern der Danish Energy Agency ([1], [2], [3], [4]) entnommen. Abweichungen werden gesondert genannt.

alle Preise werden auf Euro im Jahr 2020 (dis-)kontiert und damit inflationsbereinigt.

Für Quellen 1, 2, 3, 4 ist das meist die Umrechnung von 2015 zu 2020. Dafür folgende Formel verwendet:

P_(2020) = P_(2015)*f_(infl)
f_(infl) = (1+i_(2015))*(1+i_(2016))...*(1+i_(2019))
f_(infl) = 1,005 * 1,005 * 1.015 * 1,018 * 1,014 = 1,0582

8

Werte für 2045 werden durch lineare Extrapolation ermittelt.

biogas_upgrading plant#

Quelle: [4] "82 Biogas, upgrading"

Aufbereitung von Biogas zu Bio-SNG

biogas bpchp_central#

Quelle: 1 "06 Gas engines, biogas"

Backpressure Combined heat and power (bpchp) modelliert BHKWs

thermal effiency = electrical_effiency / (c_b+c_v) ( laut 1 S. 390)

biogas bpchp_decentral#

Quelle: 1 "06 Gas engines, biogas"

Identische Werte zu biogas bpchp_central. Split fürs Energiesystem, aber eingesetzte Technologie identisch.

biogas_plant#

Quelle 4: "81 Biogas Plant, Basic conf."

Stellt Biogas bereit, welches in KWK (biogas bpchp_central, biogas bpchp_decentral) genutzt werden kann

boiler_central#

Quelle 1: "44 Natural Gas DH Only"

boiler_decentral#

Quelle 2: "202 Gas boiler, ex single", "202 Gas boiler, ex apart", "202 Gas boiler, new single", "202 Gas boiler, new apart"

Es werden für jedes Szenario jeder Wert aus 4 Komponenten zusammengesetzt.

Diese sind die Kombinationen aus:

  • Altbau-Neubau
  • Einfamilienhaus-Mehrfamilienhaus

Diese Kompnonten werden durch Faktoren gewichtet zusammengefasst.

Für 2020:

  • Verhältnis von Altbau-Neubau aus 7
  • Verhätnis von Einfamilienhaus-Mehrfamilienhaus im Neubau aus 6, verbaute Gasheizungen aggregiert
  • Verhätnis von Einfamilienhaus-Mehrfamilienhaus im Altbau wird als 0.7 / 0.3 angenommen

Für 2045:

  • Verhältnis von Altbau-Neubau aus 7
  • Verhätnis von Einfamilienhaus-Mehrfamilienhaus im Neubau aus 6, verbaute Gasheizungen in 2020
  • Verhätnis von Einfamilienhaus-Mehrfamilienhaus im Altbau wird als 0.7 / 0.3 angenommen

volle Berechnungen siehe "boiler_small_script.py" im Code Anhang

ch4 bpchp_central#

Quelle: 1 "06 Gas engines, natural gas"

Backpressure Combined heat and power (bpchp) modelliert BHKWs

thermal effiency = electrical_effiency / (c_b+c_v) ( laut 1 S. 390)

ch4 bpchp_decentral#

Quelle: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and "06 Gas engines, natural gas"

Identische Werte zu ch4 bpchp_central. Split fürs Energiesystem, aber eingesetzte Technologie identisch.

ch4 extchp_central#

Quellen: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and "05 Gas turb. CC, steam extract., Large", [14] S. 20-21

ch4 extchp_decentral#

Quelle: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and "05 Gas turb. CC, steam extract., Large"

[14] S. 20-21

Identisch wie ch4 extchp_central

gt#

Quelle: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and " 04 Gas turb. simple cycle, L"

gas turbine, offener Prozess

heatpump_central#

Quelle: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and " 40 Comp. hp, airsource 10 MW"

Wärmepumpentechnologie (Luft-Wasser-WP) aus Langfristigkeitsszenarien

heatpump_decentral#

Quellen: 2)

Es werden für jedes Szenario jeder Wert aus 8 Komponenten zusammengesetzt. Diese sind die Kombinationen aus:

  • Sole-Umwelt
  • Einfamilienhaus-Mehrfamilienhaus (fast alle WP in Einfamilienhäsuern!)
  • Altbau-Neubau

Es wird das gemittelte Verhätnis Deutschlandweit der letzten 20 Jahre angenommen (BBSR; Bundesamt für Bauwesen und Raumordnung)

Für 2020 wurden Annahmen für das allgemeine Verhältnis zwischen den Möglichkeiten angenommen:

  • Sole-Umwelt sind die aggregierten Absatzzahlen aus [5]
  • Einfamilienhaus-Mehrfamilienhaus aus 6
  • Altbau-Neubau aus 7

Mit diesen wird für 2045 wurden Annahmen für das allgemeine Verhältnis zwischen den Möglichkeiten angenommen:

  • Sole-Umwelt = 0.87/0.13 (Das sind die Absatzzahlen aus 2022 aus der Branchenstudie)
  • Einfamilienhaus-Mehrfamilienhaus = 0.7 / 0.3 (Das ist eine freie Annahme, die eine fortschreitende Verbreitung in Mehrfamilienhäusern annimmt)
  • Altbau-Neubau = 0.699 / 0.301 (das gemittelte Verhätnis Deutschlandweit der letzten 20 Jahre)

Die Faktoren in 2045 sind daher:

  • Altbau_Umwelt_EFH = 0.4256
  • Altbau_Umwelt_MFH = 0.1824
  • Altbau_Sole_EFH = 0.0636
  • Altbau_Sole_MFH = 0.0272
  • Neubau_Umwelt_EFH = 0.1833
  • Neubau_Umwelt_MFH = 0.0785
  • Neubau_Sole_EFH = 0.0273
  • Neubau_Sole_MFH = 0.0117

Berechnung siehe "heatpump_small_script.py" im Code Anhang

large_scale_battery#

Quellen: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and " 180 Lithium Ion Battery", Cebulla [9] S. 181

storage_fixom_cost Berechnung aus UMAS/Oemof_B3 übernommen, ohne Quelle dieser Berechnung gefunden zu haben.

storage_fixom_cost = 0,005 * storage_capacity_cost_overnight

Große Differenzen zwischen Windnode und UMAS, UMAS Methodik übernommen

pth_central#

Quellen: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and " 41 Electric Boilers, small", "41 Electric Boilers, large"

Es wurde ein Mittelwert aus den Electric Biolers small und large gebildet, um relevante Größen in ABW abzubilden.

pth_decentral#

Quellen: 2: " 216 Electric heating,new single", "216 Electric heating,new apart"

Annahmen zu Gebäudebestand siehe heatpump_decentral, nur ohne Kombination mit Altbau, da power to heat in Altbauten vernachlässigbar selten (und wenn in anderen Technologien wie Nachtspeicherheizungen) vorkommt.

Berechnungen siehe "pth_decentral_script" im Code Anhang

small_scale_battery#

Quelle: 15, [17] S. 3

  • capacity_cost_overnight: [15] S. 41
  • effiency, lost_rate, lifetime: [15] S.v91

storage heat_central#

Quelle 3: " 141 Large hot water tank"

  • capacity_cost_overnight und fixom_cost ignoriert, da storage_capacity_cost_overnight, storage_fixom_cost einen Wert hat
  • storage heat_decentral

Quelle 3: " 141 Large hot water tank"

capacity_cost_overnight und fixom_cost ignoriert, da storage_capacity_cost_overnight, storage_fixom_cost einen Wert hat

Große Differenzen zwischen UMAS und Windnode, UMAS Methodik übernommen

hydro ror#

Quellen: [16]

  • fixom_cost: S. 78
  • capacity_cost_overnight: S.75
  • lifetime: S. 72

lignite oven#

Quellen: 1 " 206 Wood stove, single, ex tank"

Der Kohleofen ist eine Komponente, die für die Abbildung des Ist-Zusandes relevant ist. Die Kohleheizung wird durch gesetzliche Regulierung nicht mehr neu verbaut werden können, wodurch die Komponente für die Optimierung nicht relevant ist. Auch die Datenlage für die Kohleheizung sehr schlecht ist, die Daten werden daher approximiert.

Keine direkten Werte vorhanden, daher Modellierung anhand der wood stove Werte

efficiency:

Differenz der Energie zwischen Holz und Kohle liegt im Heizwert des Brennstoffs. Daher wird die Effizienz der wood stove mit Faktor des Verhältnisses der Heizwerte multipliziert. Daten für Heizwerte von BMWK 11 und 12 ergibt einen Faktor von 4/3

fixom_cost:

Bestehen großteils aus Brennstoffkosten. Änderung zu wood stove besteht aus Heizwert (gewonnene Energie pro kg) und Preisdiff pro Kilogramm

Preise aus brikett-rekord.com [13]

lifetime:

identisch wie wood stove

marginal-cost: identisch wie wood stove

Aus den Annahmen folgt, dass die Investkosten ignoriert werden können.

pv_ground#

Quelle 1: " 22 Utility-scale PV", Vergleich [10]

marginal_cost = 0, da in Quellen nicht vorhanden

Kosten aus 1 im Bereich von [10]

pv_rooftop#

Quelle 1: " 22 PV commercial&industrial rooftop", "22 PV residential", Vergleich [10]

gewichteter Mittelwert zwischen kommerziellen und Wohnhaus PV.

Gewichtung anhand openMaStR Daten aus Pipeline

import geopandas as gpd
import os.path

data_folder = os.path.join("/ROAD/TO/DATA")
data = "bnetza_mastr_pv_roof_region.gpkg"

df = gpd.read_file(os.path.join(data_folder, data))

sum = df[["usage_sector", "status"]].groupby("usage_sector").count().sum()
industrial = (df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Industrie"][0] + \
              df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Sonstige"][0] + \
              df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Landwirtschaft"][0] + \
              df[["usage_sector", "status"]].groupby("usage_sector").count().loc[
                  "Gewerbe, Handel und Dienstleistungen"][0]) \
             / sum
residental = (df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Öffentliches Gebäude"][0] +
              df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Haushalt"][0]) / sum
return [industrial, residental]

ergibt 25 % industrial und 75% Haushalte.

marginal_cost = 0, da in Quellen nicht vorhanden

Kosten aus 1 im Bereich von [10]

thermalcollector_central#

Quelle: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and " 46 Solar District Heating"

thermalcollector_decentral#

Quelle: [2](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-individual-heating-plants " 215 Solar heating,ex single", "215 Solar heating,ex apart", "215 Solar heating,new single", "215 Solar heating,new apart"

Annahmen zu Gebäudebestand siehe heatpump_decentral.

Berechnungen siehe "thermalcollector_decentral_script" im Code Anhang

wind onshore#

Quelle 1: " 20 Onshore turbines", Vergleich 10

EE Kosten durchweg kleiner als in Windnode in 2020

Windnode bezieht sich auf Frauenhofer ISE aus 2018, Vorgängerstudie zu 10

Frauenhofer (S.

11) 10 CAPEX-Range höher als DEA 1 in 2020

1400000-2000000 10 zu 1190000 1 €/MW

keine Aussagen in Frauenhofer 10 über 2045

wir wählen DEA als Quelle für die Vergleichbarkeit, da Vergleichbarkeit in der Optimierung der Modellierung Vorrang hat

wood extchp_central#

Quelle: 1 " 09a Wood Chips, Medium"

[14] S. 20-21

wood extchp_decentral#

Quelle: 1 " 09a Wood Chips, Medium"

[14] S. 20-21

identisch zu wood extchp_central

wood oven#

Quelle: 2, " 204 Biomass auto,ex single", "204 Biomass auto,new single", "204 Biomass auto,ex apart", "204 Biomass auto,new apart"

Annahmen zu Gebäudebestand siehe heatpump_decentral.

Berechnungen siehe "wood_oven_script" im Code Anhang

Quellen#

[1] Danish Energy Agency (2016): "Technology Data - Energy Plants for Electricity and District heating generation", Version 13, von https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and

[2] Danish Energy Agency (2016): "Technology Data for heating installations", Version 4, von https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-individual-heating-plants

[3] Danish Energy Agency (2018): "Technology Data – Energy storage", Version 7, von https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-energy-storage

[4] Danish Energy Agency (2017): "Technology Data – Renewable fuels", Versoin 9, von https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-renewable-fuels

[5] Karl-Heinz Backhaus (Vaillant), Dr. Hendrik Ehrhardt (Stiebel Eltron), Sven Kersten (NIBE), Steffen Moser (EnBW), Frank Richert (Wolf), Ingo Rieger (Bosch), Egbert Tippelt ( Viessmann), André Jacob (BWP), Johanna Otting (BWP), Björn Schreinermacher (BWP)(2023): "Branchenstudie 2023: Marktentwicklung – Prognose –Handlungsempfehlungen", Bundesverband Wärmepumpe (BWP) e. V.

[6] Statistisches Landesamt Sachsen-Anhalt: "GENESIS-Tabelle: 31121-0006, Statistik der Baufertigstellungen", von https://genesis.sachsen-anhalt.de/genesis//online?operation=table&code=31121-0006&bypass=true&levelindex=0&levelid=1682324189765#abreadcrumb, Stand: 11.04.2023

[7] Statista Research Department(2021): "Struktur des Wohnungsbaus nach Neubau und Sanierung in Deutschland in den Jahren 2001 bis 2020", von https://de.statista.com/statistik/daten/studie/202207/umfrage/struktur-des-wohnungsbaus-nach-art-der-bauleistung-in-deutschland/, Stand: 03.04.2023 12:26:20

[8] Statista: "Daten und Fakten zur Inflation und den Verbraucherpreisen" , von https://de.statista.com/themen/112/inflation/#topicOverview , Stand: 29.03.2023

[9] Cebulla, Felix (2017): "Storage demand in highly renewable energy scenarios for Europe", OPUS - Online Publikationen der Universität Stuttgart, von https://elib.uni-stuttgart.de/handle/11682/9778

[10] Frauenhofer ISE (2019): "Stromgestehungskosten erneuerbare Energien", von https://www.ise.fraunhofer.de/de/veroeffentlichungen/studien/studie-stromgestehungskosten-erneuerbare-energien.html

[11] BMWK (2021): "Energiedaten" von https://www.bmwk.de/Redaktion/DE/Artikel/Energie/energiedaten-gesamtausgabe.html

[12] Michael Herrmann, Jürgen Weber: Öfen und Kamine: Raumheizungen fachgerecht planen und bauen. Beuth Verlag, 201, von https://books.google.de/books?id=n0fVYjrHAlwC&pg=PA58#v=onepage&q&f=false

[13] www.brikett-rekord.com: "Energiekostenvergleich", von https://www.brikett-rekord.com/de/heizwertvergleich-rekord-briketts.html, letzter Abruf 8.5.2023

[14] WindNode: Modell, Methodik, Daten, ABW; von: RLI letzer Abruf 8.8.2023

[15] Fluri, Verena: "Wirtschaftlichkeit von zukunftsfähigen Geschäftsmodellen dezentraler Stromspeicher" von https://www.zhb-flensburg.de/fileadmin/content/spezial-einrichtungen/zhb/dokumente/dissertationen/fluri/fluri-2019-wirtschaftlichkeit-dez-stromspeicher.pdf, letzter Abruf 8.8.2023

[16] Schröder, Andreas; Kunz, Friedrich; Meiss, Jan; Mendelevitch, Roman; Hirschhausen, Christian von: "Current and Prospective Costs of Electricity Generation until 2050" von https://www.diw.de/documents/publikationen/73/diw_01.c.424566.de/diw_datadoc_2013-068.pdf, letzter Abruf 8.8.2023

[17] Prüggler, Wolfgang (2019): "HEIMSPEICHERSYSTEME UND ZENTRALE BATTERIESPEICHER – KRITISCHE FAKTOREN DER WIRTSCHAFTLICHKEIT" von https://ens.dk/sites/ens.dk/files/Analyser/technology_data_catalogue_for_energy_storage.pdf, letzter Abruf 8.8.2023

Code Anhang#

wood_oven_script.py

import pandas as pd
import os.path


def linear_interpolate_2045(wert_1, wert_2):
    zeit_1 = 2040
    zeit_2 = 2050
    wert = wert_1 + (((wert_2 - wert_1) / (zeit_2 - zeit_1)) * (2045 - zeit_1))

    return wert


def get_agg_price_2045(dic):
    # Neubau und Sanierungen allg nach BMI f. Deutschland
    neubau = (0.36 + 0.36 + 0.37 + 0.38 + 0.35 + 0.34 + 0.26 + 0.22 + 0.22 + 0.22 + 0.25 + 0.26 + 0.27 + 0.28 + 0.30 + 0.32 + 0.32 + 0.32 + 0.31 + 0.31) / 20
    altbau = 1 - neubau

    # Verhältnisse Einfamilienhaus-Mehrfamilienhaus nach destatis 2020
    single_new = 693 / 763
    multiple_new = (763 - 693) / 763

    # Einfamilinehaus-Mehrfamilienhaus im Altbau Annahme:
    single_faktor = 0.7
    multiple_faktor = 0.3

    single_new_faktor = neubau * single_new
    multiple_new_faktor = neubau * multiple_new
    single_old_faktor = altbau * single_faktor
    multiple_old_faktor = altbau * multiple_faktor

    single_old = single_old_faktor * dic["single_old_price"]
    multiple_old = multiple_old_faktor * dic["multiple_old_price"]
    single_new = single_new_faktor * dic["single_new_price"]
    multiple_new = multiple_new_faktor * dic["multiple_new_price"]

    preis = single_old + multiple_old + single_new + multiple_new

    return preis


# Daten aus DEA:
# einlesen von Daten
data_folder = os.path.join("/YOUR/DATA/ROAD/TAKE/ME/HOME/TO/THE/PLACE")
data = os.path.join(data_folder, "technology_data_heating_installations_-_0003.xlsx")

#datensheets
single_old = pd.read_excel(data, "204 Biomass auto,ex single", skiprows=4, nrows=33)
multiple_old = pd.read_excel(data, "204 Biomass auto,ex apart", skiprows=4, nrows=33)
single_new = pd.read_excel(data, "204 Biomass auto,new single", skiprows=4, nrows=33)
multiple_new = pd.read_excel(data, "204 Biomass auto,new apart", skiprows=4, nrows=33)

dic_capacity_cost_overnight_2045 = {
    "single_old_price": linear_interpolate_2045((single_old.iat[19,5]*1000)/(single_old.iat[0,5]/1000), (single_old.iat[19,6]*1000)/(single_old.iat[0,6]/1000)),
    "multiple_old_price": linear_interpolate_2045((multiple_old.iat[19,5]*1000)/(multiple_old.iat[0,5]/1000), (multiple_old.iat[19,6]*1000)/(multiple_old.iat[0,6]/1000)),
    "single_new_price": linear_interpolate_2045((single_new.iat[19,5]*1000)/(single_new.iat[0,5]/1000), (single_new.iat[19,6]*1000)/(single_new.iat[0,6]/1000)),
    "multiple_new_price": linear_interpolate_2045((multiple_new.iat[19,5]*1000)/(multiple_new.iat[0,5]/1000), (multiple_new.iat[19,6]*1000)/(multiple_new.iat[0,6]/1000)),
}

dic_effiency_2045 = {
    "single_old_price": linear_interpolate_2045(single_old.iat[3,5], single_old.iat[3,6]),
    "multiple_old_price": linear_interpolate_2045(multiple_old.iat[3,5], multiple_old.iat[3,6]) ,
    "single_new_price":  linear_interpolate_2045(single_new.iat[3,5], single_new.iat[3,6]),
    "multiple_new_price": linear_interpolate_2045(multiple_new.iat[3,5], multiple_new.iat[3,6])
}

dic_fixom_cost_2045 = {
    "single_old_price": linear_interpolate_2045((single_old.iat[24,5])/(single_old.iat[0,5]/1000), (single_old.iat[24,6])/(single_old.iat[0,6]/1000)),
    "multiple_old_price":  linear_interpolate_2045((multiple_old.iat[24,5])/(multiple_old.iat[0,5]/1000), (multiple_old.iat[24,6])/(multiple_old.iat[0,6]/1000)),
    "single_new_price": linear_interpolate_2045((single_new.iat[24,5])/(single_new.iat[0,5]/1000), (single_new.iat[24,5])/(single_new.iat[0,5]/1000)),
    "multiple_new_price": linear_interpolate_2045((multiple_new.iat[24,5])/(multiple_new.iat[0,5]/1000), (multiple_new.iat[24,6])/(multiple_new.iat[0,6]/1000)),
}
dic_lifetime_2045 = {
    "single_old_price": linear_interpolate_2045(single_old.iat[5,5], single_old.iat[5,6]),
    "multiple_old_price": linear_interpolate_2045(multiple_old.iat[5,5], multiple_old.iat[5,6]),
    "single_new_price": linear_interpolate_2045(single_new.iat[5,5], single_new.iat[5,6]),
    "multiple_new_price": linear_interpolate_2045(multiple_new.iat[5,5], multiple_new.iat[5,6]),
}

dic_marginal_cost_2045 = {
    "single_old_price": linear_interpolate_2045(single_old.iat[23,2] / 1000, single_old.iat[23,2] / 1000),
    "multiple_old_price": linear_interpolate_2045(multiple_old.iat[23,2] / 1000, multiple_old.iat[23,2] / 1000),
    "single_new_price": linear_interpolate_2045(single_new.iat[23,2] / 1000,single_new.iat[23,2] ),
    "multiple_new_price": linear_interpolate_2045(multiple_new.iat[23,2] / 1000, multiple_new.iat[23,2] / 1000),
}

dic_2045 = [dic_capacity_cost_overnight_2045,dic_effiency_2045, dic_fixom_cost_2045, dic_lifetime_2045, dic_marginal_cost_2045]
val_2045 = []

# Berechnungen
for dic in dic_2045:
    val_2045.append(get_agg_price_2045(dic))

print(val_2045)

thermal_collector_small_script.py

import pandas as pd
import os.path

def linear_interpolate_2045(wert_1, wert_2):
    zeit_1 = 2040
    zeit_2 = 2050
    wert = wert_1 + (((wert_2 - wert_1) / (zeit_2 - zeit_1)) * (2045 - zeit_1))

    return wert


def get_agg_price_2045(dic):
    # Neubau und Sanierungen allg nach BMI f. Deutschland
    neubau = (0.36 + 0.36 + 0.37 + 0.38 + 0.35 + 0.34 + 0.26 + 0.22 + 0.22 + 0.22 + 0.25 + 0.26 + 0.27 + 0.28 + 0.30 + 0.32 + 0.32 + 0.32 + 0.31 + 0.31) / 20
    altbau = 1 - neubau

    # Verhältnisse Einfamilienhaus-Mehrfamilienhaus nach destatis 2020
    single_new = 693 / 763
    multiple_new = (763 - 693) / 763

    # Einfamilinehaus-Mehrfamilienhaus im Altbau Annahme:
    single_faktor = 0.7
    multiple_faktor = 0.3

    single_new_faktor = neubau * single_new
    multiple_new_faktor = neubau * multiple_new
    single_old_faktor = altbau * single_faktor
    multiple_old_faktor = altbau * multiple_faktor

    single_old = single_old_faktor * dic["single_old_price"]
    multiple_old = multiple_old_faktor * dic["multiple_old_price"]
    single_new = single_new_faktor * dic["single_new_price"]
    multiple_new = multiple_new_faktor * dic["multiple_new_price"]

    preis = single_old + multiple_old + single_new + multiple_new

    return preis


# Daten aus DEA:
# einlesen von Daten
data_folder = os.path.join("/YOUR/DATA/ROAD/TAKE/ME/HOME/TO/THE/PLACE")
data = os.path.join(data_folder, "technology_data_heating_installations_-_0003.xlsx")

#datensheets
single_old = pd.read_excel(data, "215 Solar heating,ex single", skiprows=4, nrows=33)
multiple_old = pd.read_excel(data, "215 Solar heating,ex apart", skiprows=4, nrows=33)
single_new = pd.read_excel(data, "215 Solar heating,new single", skiprows=4, nrows=33)
multiple_new = pd.read_excel(data, "215 Solar heating,new apart", skiprows=4, nrows=33)

dic_capacity_cost_overnight_2045 = {
    "single_old_price": linear_interpolate_2045((single_old.iat[19,5]*1000)/(single_old.iat[0,5]/1000), (single_old.iat[19,6]*1000)/(single_old.iat[0,6]/1000)),
    "multiple_old_price": linear_interpolate_2045((multiple_old.iat[19,5]*1000)/(multiple_old.iat[0,5]/1000), (multiple_old.iat[19,6]*1000)/(multiple_old.iat[0,6]/1000)),
    "single_new_price": linear_interpolate_2045((single_new.iat[19,5]*1000)/(single_new.iat[0,5]/1000), (single_new.iat[19,6]*1000)/(single_new.iat[0,6]/1000)),
    "multiple_new_price": linear_interpolate_2045((multiple_new.iat[19,5]*1000)/(multiple_new.iat[0,5]/1000), (multiple_new.iat[19,6]*1000)/(multiple_new.iat[0,6]/1000)),
}

dic_fixom_cost_2045 = {
    "single_old_price": linear_interpolate_2045((single_old.iat[24,5])/(single_old.iat[0,5]/1000), (single_old.iat[24,6])/(single_old.iat[0,6]/1000)),
    "multiple_old_price":  linear_interpolate_2045((multiple_old.iat[24,5])/(multiple_old.iat[0,5]/1000), (multiple_old.iat[24,6])/(multiple_old.iat[0,6]/1000)),
    "single_new_price": linear_interpolate_2045((single_new.iat[24,5])/(single_new.iat[0,5]/1000), (single_new.iat[24,5])/(single_new.iat[0,5]/1000)),
    "multiple_new_price": linear_interpolate_2045((multiple_new.iat[24,5])/(multiple_new.iat[0,5]/1000), (multiple_new.iat[24,6])/(multiple_new.iat[0,6]/1000)),
}
dic_lifetime_2045 = {
    "single_old_price": linear_interpolate_2045(single_old.iat[5,5], single_old.iat[5,6]),
    "multiple_old_price": linear_interpolate_2045(multiple_old.iat[5,5], multiple_old.iat[5,6]),
    "single_new_price": linear_interpolate_2045(single_new.iat[5,5], single_new.iat[5,6]),
    "multiple_new_price": linear_interpolate_2045(multiple_new.iat[5,5], multiple_new.iat[5,6]),
}

dic_2045 = [dic_capacity_cost_overnight_2045, dic_fixom_cost_2045, dic_lifetime_2045]
val_2045 = []

# Berechnungen
for dic in dic_2045:
    val_2045.append(get_agg_price_2045(dic))

print(val_2045)

pv_rooftop_script.py:

import pandas as pd
import geopandas as gpd
import os.path

#trennt residential and industrial rooftop PV nach Nennleistung
def get_proprtion_residential_industrtial(df):
    sum = df[["usage_sector", "status"]].groupby("usage_sector").count().sum()
    industrial = (df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Industrie"][0] + \
                  df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Sonstige"][0] + \
                  df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Landwirtschaft"][0] + \
                  df[["usage_sector", "status"]].groupby("usage_sector").count().loc[
                      "Gewerbe, Handel und Dienstleistungen"][0]) \
                 / sum
    residental = (df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Öffentliches Gebäude"][0] +
                  df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Haushalt"][0]) / sum
    return [industrial, residental]


def get_qgis_df(GeoDataFrame):
    gdf = gpd.read_file(GeoDataFrame, where="geometry_approximated='0'")
    gdf.where(gdf["status"] == "In Betrieb").to_file("bnetza_mastr_pv_roof_region_filtered.gpkg")

def linear_interpolate_2045(wert_1, wert_2):
    zeit_1 = 2040
    zeit_2 = 2050
    wert = wert_1 + (((wert_2 - wert_1) / (zeit_2 - zeit_1)) * (2045 - zeit_1))

    return wert

def get_agg_price_2045(dic, proportion):
    # getting faktoren
    industrial_factor = proportion[0][0]
    residential_factor = proportion[1][0]

    residential = residential_factor * dic["residential_price"]
    industrial = industrial_factor * dic["industrial_price"]

    preis = residential + industrial

    return preis


data_folder = os.path.join("/YOUR/DATA/ROAD/TAKE/ME/HOME/TO/THE/PLACE")
data = ["bnetza_mastr_pv_ground_region.gpkg", "bnetza_mastr_pv_roof_region.gpkg"]

df = gpd.read_file(os.path.join(data_folder, data[1]))

# Daten aus DEA:
# einlesen von Daten
data_folder_sheets = os.path.join("/YOUR/DATA/ROAD/TAKE/ME/HOME/TO/THE/PLACE")
data_sheets = os.path.join(data_folder_sheets, "technology_data_for_el_and_dh.xlsx")

#datensheets
residential = pd.read_excel(data_sheets, "22 Rooftop PV residential", skiprows=4, nrows=42)
industrial = pd.read_excel(data_sheets, "22 Rooftop PV comm.&industrial", skiprows=4, nrows=42)

proportion = get_proprtion_residential_industrtial(df)

dic_capacity_cost_overnight_2045 = {
    "residential_price": linear_interpolate_2045(residential.iat[10,5], residential.iat[10,6])*1000000,
    "industrial_price": linear_interpolate_2045(industrial.iat[10,5], industrial.iat[10,6])*1000000
}
dic_fixom_cost_2045 = {
    "residential_price": linear_interpolate_2045(residential.iat[18,5], residential.iat[18,6]),
    "industrial_price":  linear_interpolate_2045(industrial.iat[18,5], industrial.iat[18,6]),
}

dic_lifetime_2045 = {
    "residential_price": linear_interpolate_2045(residential.iat[3,5], residential.iat[3,6]),
    "industrial_price": linear_interpolate_2045(industrial.iat[3,5], industrial.iat[3,6]),
}

dic_2045 = [dic_capacity_cost_overnight_2045, dic_fixom_cost_2045, dic_lifetime_2045]
val_2045 = []

# Berechnungen
for dic in dic_2045:
    val_2045.append(get_agg_price_2045(dic, proportion))

print(dic_capacity_cost_overnight_2045, dic_fixom_cost_2045, dic_lifetime_2045)
print(proportion[0][0])
print(val_2045)

Pth_decentral_sc0irpt.py

import pandas as pd
import os.path

def linear_interpolate_2045(wert_1, wert_2):
    zeit_1 = 2040
    zeit_2 = 2050
    wert = wert_1 + (((wert_2 - wert_1) / (zeit_2 - zeit_1)) * (2045 - zeit_1))

    return wert


def get_agg_price_2045(dic):
    # Neubau und Sanierungen allg nach BMI f. Deutschland
    neubau = (0.36 + 0.36 + 0.37 + 0.38 + 0.35 + 0.34 + 0.26 + 0.22 + 0.22 + 0.22 + 0.25 + 0.26 + 0.27 + 0.28 + 0.30 + 0.32 + 0.32 + 0.32 + 0.31 + 0.31) / 20

    # Verhältnisse Einfamilienhaus-Mehrfamilienhaus nach destatis 2020
    single_new = 693 / 763
    multiple_new = (763 - 693) / 763

    single_new_faktor = single_new
    multiple_new_faktor = multiple_new


    single_new = single_new_faktor * dic["single_new_price"]
    multiple_new = multiple_new_faktor * dic["multiple_new_price"]

    preis = single_new + multiple_new

    return preis


# Daten aus DEA:
# einlesen von Daten
data_folder = os.path.join("/YOUR/DATA/ROAD/TAKE/ME/HOME/TO/THE/PLACE")
data = os.path.join(data_folder, "technology_data_heating_installations_-_0003.xlsx")

#datensheets
single_new = pd.read_excel(data, "216 Electric heating,new single", skiprows=4, nrows=33)
multiple_new = pd.read_excel(data, "216 Electric heating,new apart", skiprows=4, nrows=33)

dic_capacity_cost_overnight_2045 = {
    "single_new_price": linear_interpolate_2045((single_new.iat[19,5]*1000)/(single_new.iat[0,5]/1000), (single_new.iat[19,6]*1000)/(single_new.iat[0,6]/1000)),
    "multiple_new_price": linear_interpolate_2045((multiple_new.iat[19,5]*1000)/(multiple_new.iat[0,5]/1000), (multiple_new.iat[19,6]*1000)/(multiple_new.iat[0,6]/1000)),
}
dic_effiency_2045 = {
    "single_new_price":  linear_interpolate_2045(single_new.iat[3,5], single_new.iat[3,6]),
    "multiple_new_price": linear_interpolate_2045(multiple_new.iat[3,5], multiple_new.iat[3,6])
}
dic_fixom_cost_2045 = {
    "single_new_price": linear_interpolate_2045((single_new.iat[24,5])/(single_new.iat[0,5]/1000), (single_new.iat[24,5])/(single_new.iat[0,5]/1000)),
    "multiple_new_price": linear_interpolate_2045((multiple_new.iat[24,5])/(multiple_new.iat[0,5]/1000), (multiple_new.iat[24,6])/(multiple_new.iat[0,6]/1000)),
}
dic_lifetime_2045 = {
    "single_new_price": linear_interpolate_2045(single_new.iat[5,5], single_new.iat[5,6]),
    "multiple_new_price": linear_interpolate_2045(multiple_new.iat[5,5], multiple_new.iat[5,6]),
}
dic_marginal_cost_2045 = {
    "single_new_price": linear_interpolate_2045(single_new.iat[23,2] / 1000,single_new.iat[23,2] ),
    "multiple_new_price": linear_interpolate_2045(multiple_new.iat[23,2] / 1000, multiple_new.iat[23,2] / 1000),
}

dic_2045 = [dic_capacity_cost_overnight_2045, dic_effiency_2045 , dic_fixom_cost_2045, dic_lifetime_2045, dic_marginal_cost_2045]
val_2045 = []

print(dic_fixom_cost_2045)
# Berechnungen
for dic in dic_2045:
    val_2045.append(get_agg_price_2045(dic))

print(val_2045)

heatpump_small_script.py:

import pandas as pd
import os.path

def get_faktoren_new(df):

    hp_agg = {"single_erdwaerme": 0, "multiple_erdwaerme": 0,  "single_umweltwaerme": 0, "multiple_umweltwaerme": 0,}

    for row in df.itertuples():
        bereich = row[1].split(",")[2]
        energie = row[1].split(",")[3]
        try:
            count_insg = int(row[1].split(",")[4])
            count_single = int(row[1].split(",")[5])
        except:
            ValueError

        if bereich == "Sachsen-Anhalt":
            if energie == "Geothermie":
                hp_agg["single_erdwaerme"] += count_single
                hp_agg["multiple_erdwaerme"] += (count_insg - count_single)
            elif energie == "Umweltthermie (Luft / Wasser)":
                hp_agg["single_umweltwaerme"] += count_single
                hp_agg["multiple_umweltwaerme"] +=  (count_insg - count_single)
            else:
                continue

        else:
            continue

    hp_agg_sum = sum(hp_agg.values())
    air_single_new = hp_agg["single_umweltwaerme"] / hp_agg_sum
    air_multiple_new = hp_agg["multiple_umweltwaerme"] / hp_agg_sum
    ground_single_new = hp_agg["single_erdwaerme"] / hp_agg_sum
    ground_multiple_new = hp_agg["multiple_erdwaerme"] / hp_agg_sum

    return air_single_new, air_multiple_new, ground_single_new, ground_multiple_new

def linear_interpolate_2045(wert_1, wert_2):
    zeit_1 = 2040
    zeit_2 = 2050
    wert = wert_1 + (((wert_2 - wert_1) / (zeit_2 - zeit_1)) * (2045 - zeit_1))

    return wert


def get_agg_price_2020(dic):
    # nach BWP: Absatz von 2010-2020 -> bildet Bestand mit Kosten von Neubau ab
    wp_neubau_abs = 52500+52500+45000+45000+37500+37500+37500+37500+30000+30000+30000
    wp_altbau_abs = 67500+37500+37500+37500+30000+22500+22500+22500+30000+30000+22500
    wp_gesamt_abs = wp_altbau_abs + wp_neubau_abs
    wp_neubau = wp_neubau_abs / wp_gesamt_abs
    wp_geo = 333333 / (333333+750000)
    wp_umwelt = 750000 / (333333+750000) #Umwelt = Luft und Wasser

    # Verhältnisse WP Alt und Neubau in ST nach destatis
        # Daten einlesen
    data_folder = os.path.join("/YOUR/DATA/ROAD/TAKE/ME/HOME/TO/THE/PLACE")
    hp = os.path.join(data_folder, "2023_04_11_ST_thermische_Primärenergie_neubau_2010-2020.csv")
    df = pd.read_csv(hp, encoding="ISO8859-1", delimiter=";", skiprows=range(0, 10), nrows=2150)

    faktoren_new = get_faktoren_new(df)

    air_water_single_new_faktor = wp_neubau * faktoren_new[0]
    air_water_multiple_new_faktor = wp_neubau * faktoren_new[1]
    ground_water_single_new_fakotr = wp_neubau * faktoren_new[2]
    ground_water_multiple_new_faktor = wp_neubau * faktoren_new[3]

    # wp altbau:
    altbau_air = wp_umwelt - (air_water_single_new_faktor + air_water_multiple_new_faktor)
    altbau_ground = wp_geo - (ground_water_single_new_fakotr + ground_water_multiple_new_faktor)

    # keine Daten, daher wie neubau angenommen (es gibt keinen Grund zu glauben, dass im Mehrfamilien-Altbau mehr WP verbaut werden)
    single_faktor = faktoren_new[0] + faktoren_new[2] # ca 0.95
    multiple_faktor = faktoren_new[1] + faktoren_new[3] # ca 0.05

    air_water_single_old_faktor = altbau_air * single_faktor
    air_water_multiple_old_faktor = altbau_air * multiple_faktor
    ground_water_single_old_fakotr = altbau_ground * single_faktor
    ground_water_multiple_old_faktor = altbau_ground * multiple_faktor


    air_water_single_old = air_water_single_old_faktor * dic["air_water_single_old_price"]
    air_water_multiple_old = air_water_multiple_old_faktor * dic["air_water_multiple_old_price"]
    ground_water_single_old = ground_water_single_old_fakotr * dic["ground_water_single_old_price"]
    ground_water_multiple_old = ground_water_multiple_old_faktor * dic["ground_water_multiple_old_price"]

    air_water_single_new = air_water_single_new_faktor * dic["air_water_single_new_price"]
    air_water_multiple_new = air_water_multiple_new_faktor * dic["air_water_multiple_new_price"]
    ground_water_single_new = ground_water_single_new_fakotr * dic["ground_water_single_new_price"]
    ground_water_multiple_new = ground_water_multiple_new_faktor * dic["ground_water_multiple_new_price"]

    altbau_kosten = air_water_single_old + air_water_multiple_old + ground_water_single_old + ground_water_multiple_old
    neubau_kosten = air_water_single_new + air_water_multiple_new + ground_water_single_new + ground_water_multiple_new

    preis = altbau_kosten + neubau_kosten

    faktoren = [air_water_single_old_faktor,
    air_water_multiple_old_faktor,
    ground_water_single_old_fakotr,
    ground_water_multiple_old_faktor,
    air_water_single_new_faktor,
    air_water_multiple_new_faktor,
    ground_water_single_new_fakotr,
    ground_water_multiple_new_faktor,
    ]

    return preis, faktoren


def get_agg_price_2045(dic):
    # Neubau und Sanierungen allg nach BMI f. Deutschland
    neubau_allg_prozent = (0.36 + 0.36 + 0.37 + 0.38 + 0.35 + 0.34 + 0.26 + 0.22 + 0.22 + 0.22 + 0.25 + 0.26 + 0.27 + 0.28 + 0.30 + 0.32 + 0.32 + 0.32 + 0.31 + 0.31) / 20
    altbau_allg_prozent = 1 - neubau_allg_prozent

    # Sole/Luft nach Absatz 2022 laut BWP
    ground = 0.13
    air = 0.87

    # Einfamilienhaus/Mehrfamilienhaus
    single = 0.7
    multiple = 0.3


    # Faktoren
    air_water_single_old_faktor = altbau_allg_prozent * air * single
    air_water_multiple_old_faktor = altbau_allg_prozent * air * multiple
    ground_water_single_old_fakotr = altbau_allg_prozent * ground * single
    ground_water_multiple_old_faktor = altbau_allg_prozent * ground * multiple
    air_water_single_new_faktor = neubau_allg_prozent * air * single
    air_water_multiple_new_faktor = neubau_allg_prozent * air * multiple
    ground_water_single_new_fakotr = neubau_allg_prozent * ground * single
    ground_water_multiple_new_faktor = neubau_allg_prozent * ground * multiple

    air_water_single_old = air_water_single_old_faktor * dic["air_water_single_old_price"]
    air_water_multiple_old = air_water_multiple_old_faktor * dic["air_water_multiple_old_price"]
    ground_water_single_old = ground_water_single_old_fakotr * dic["ground_water_single_old_price"]
    ground_water_multiple_old = ground_water_multiple_old_faktor * dic["ground_water_multiple_old_price"]
    air_water_single_new = air_water_single_new_faktor * dic["air_water_single_new_price"]
    air_water_multiple_new = air_water_multiple_new_faktor * dic["air_water_multiple_new_price"]
    ground_water_single_new = ground_water_single_new_fakotr * dic["ground_water_single_new_price"]
    ground_water_multiple_new = ground_water_multiple_new_faktor * dic["ground_water_multiple_new_price"]

    altbau_kosten = air_water_single_old + air_water_multiple_old + ground_water_single_old + ground_water_multiple_old
    neubau_kosten = air_water_single_new + air_water_multiple_new + ground_water_single_new + ground_water_multiple_new

    preis = altbau_kosten + neubau_kosten

    faktoren = [air_water_single_old_faktor,
    air_water_multiple_old_faktor,
    ground_water_single_old_fakotr,
    ground_water_multiple_old_faktor,
    air_water_single_new_faktor,
    air_water_multiple_new_faktor,
    ground_water_single_new_fakotr,
    ground_water_multiple_new_faktor,
    ]

    return preis, faktoren


# Daten aus DEA:
# einlesen von Daten
data_folder = os.path.join("/home/local/RL-INSTITUT/aaron.schilling/Dokumente/Projekte/Digipipe")
data = os.path.join(data_folder, "technology_data_heating_installations_-_0003.xlsx")

#datensheets
air_water_single_old = pd.read_excel(data, "207 HP air-water,ex single", skiprows=4, nrows=33)
air_water_multiple_old = pd.read_excel(data, "207 HP air-water,ex apart", skiprows=4, nrows=33)
ground_water_single_old = pd.read_excel(data, "207 HP air-water,new single", skiprows=4, nrows=33)
ground_water_multiple_old = pd.read_excel(data,  "207 HP air-water,new apart", skiprows=4, nrows=33)
air_water_single_new = pd.read_excel(data, "207 HP ground-water,ex single", skiprows=4, nrows=33)
air_water_multiple_new = pd.read_excel(data, "207 HP ground-water,ex apart", skiprows=4, nrows=33)
ground_water_single_new = pd.read_excel(data, "207 HP ground-water,new single", skiprows=4, nrows=33)
ground_water_multiple_new = pd.read_excel(data, "207 HP ground-water,new apart", skiprows=4, nrows=33)

dic_capacity_cost_overnight_2020 = {
        "air_water_single_old_price": air_water_single_old.iat[19,2]*1000/(air_water_single_old.iat[0,2]/1000),
        "air_water_multiple_old_price": air_water_multiple_old.iat[19,2]*1000/(air_water_multiple_old.iat[0,2]/1000),
        "ground_water_single_old_price": ground_water_single_old.iat[19,2]*1000/(ground_water_single_old.iat[0,2]/1000),
        "ground_water_multiple_old_price": ground_water_multiple_old.iat[19,2]*1000/(ground_water_multiple_old.iat[0,2]/1000),
        "air_water_single_new_price": air_water_single_new.iat[19,2]*1000/(air_water_single_new.iat[0,2]/1000),
        "air_water_multiple_new_price": air_water_multiple_new.iat[19,2]*1000/(air_water_multiple_new.iat[0,2]/1000),
        "ground_water_single_new_price": ground_water_single_new.iat[19,2]*1000/(ground_water_single_new.iat[0,2]/1000),
        "ground_water_multiple_new_price": ground_water_multiple_new.iat[19,2]*1000/(ground_water_multiple_new.iat[0,2]/1000),
}
dic_fixom_cost_2020 = {
        "air_water_single_old_price": air_water_single_old.iat[24,2]/(air_water_single_old.iat[0,2]/1000),
        "air_water_multiple_old_price": air_water_multiple_old.iat[24,2]/(air_water_multiple_old.iat[0,2]/1000),
        "ground_water_single_old_price": ground_water_single_old.iat[24,2]/(ground_water_single_old.iat[0,2]/1000),
        "ground_water_multiple_old_price": ground_water_multiple_old.iat[24,2]/(ground_water_multiple_old.iat[0,2]/1000),
        "air_water_single_new_price": air_water_single_new.iat[24,2]/(air_water_single_new.iat[0,2]/1000),
        "air_water_multiple_new_price": air_water_multiple_new.iat[24,2]/(air_water_multiple_new.iat[0,2]/1000),
        "ground_water_single_new_price": ground_water_single_new.iat[24,2]/(ground_water_single_new.iat[0,2]/1000),
        "ground_water_multiple_new_price": ground_water_multiple_new.iat[24,2]/(ground_water_multiple_new.iat[0,2]/1000),
}
dic_lifetime_2020 = {
        "air_water_single_old_price": air_water_single_old.iat[5,2],
        "air_water_multiple_old_price": air_water_multiple_old.iat[5,2],
        "ground_water_single_old_price": ground_water_single_old.iat[5,2],
        "ground_water_multiple_old_price": ground_water_multiple_old.iat[5,2],
        "air_water_single_new_price": air_water_single_new.iat[5,2],
        "air_water_multiple_new_price": air_water_multiple_new.iat[5,2],
        "ground_water_single_new_price": ground_water_single_new.iat[5,2],
        "ground_water_multiple_new_price": ground_water_multiple_new.iat[5,2],
}
dic_marginal_cost_2020 = {
        "air_water_single_old_price": air_water_single_old.iat[23,2] / 1000,
        "air_water_multiple_old_price": air_water_multiple_old.iat[23,2] / 1000,
        "ground_water_single_old_price": ground_water_single_old.iat[23,2] / 1000,
        "ground_water_multiple_old_price": ground_water_multiple_old.iat[23,2] / 1000,
        "air_water_single_new_price": air_water_single_new.iat[23,2] / 1000,
        "air_water_multiple_new_price": air_water_multiple_new.iat[23,2] / 1000,
        "ground_water_single_new_price": ground_water_single_new.iat[23,2] / 1000,
        "ground_water_multiple_new_price": ground_water_multiple_new.iat[23,2] / 1000,
}
dic_capacity_cost_overnight_2045 = {
        "air_water_single_old_price": linear_interpolate_2045(air_water_single_old.iat[19,5]*1000/(air_water_single_old.iat[0,5]/1000), air_water_single_old.iat[19,6]*1000/(air_water_single_old.iat[0,6]/1000)),
        "air_water_multiple_old_price": linear_interpolate_2045(air_water_multiple_old.iat[19,5]*1000/(air_water_multiple_old.iat[0,5]/1000), air_water_multiple_old.iat[19,6]*1000/(air_water_multiple_old.iat[0,6]/1000)),
        "ground_water_single_old_price": linear_interpolate_2045(ground_water_single_old.iat[19,5]*1000/(ground_water_single_old.iat[0,5]/1000),ground_water_single_old.iat[19,6]*1000/(ground_water_single_old.iat[0,6]/1000)),
        "ground_water_multiple_old_price": linear_interpolate_2045(ground_water_multiple_old.iat[19,5]*1000/(ground_water_multiple_old.iat[0,5]/1000), ground_water_multiple_old.iat[19,6]*1000/(ground_water_multiple_old.iat[0,6]/1000)),
        "air_water_single_new_price": linear_interpolate_2045(air_water_single_new.iat[19,5]*1000/(air_water_single_new.iat[0,5]/1000), air_water_single_new.iat[19,6]*1000/(air_water_single_new.iat[0,6]/1000)),
        "air_water_multiple_new_price": linear_interpolate_2045(air_water_multiple_new.iat[19,5]*1000/(air_water_multiple_new.iat[0,5]/1000),air_water_multiple_new.iat[19,6]*1000/(air_water_multiple_new.iat[0,6]/1000)),
        "ground_water_single_new_price": linear_interpolate_2045(ground_water_single_new.iat[19,5]*1000/(ground_water_single_new.iat[0,5]/1000), ground_water_single_new.iat[19,6]*1000/(ground_water_single_new.iat[0,6]/1000)),
        "ground_water_multiple_new_price": linear_interpolate_2045(ground_water_multiple_new.iat[19,5]*1000/(ground_water_multiple_new.iat[0,5]/1000), ground_water_multiple_new.iat[19,6]*1000/(ground_water_multiple_new.iat[0,6]/1000)),
}
dic_fixom_cost_2045 = {
        "air_water_single_old_price": linear_interpolate_2045(air_water_single_old.iat[24,5]/(air_water_single_old.iat[0,5]/1000), air_water_single_old.iat[24,6]/(air_water_single_old.iat[0,6]/1000)),
        "air_water_multiple_old_price": linear_interpolate_2045(air_water_multiple_old.iat[24,5]/(air_water_multiple_old.iat[0,5]/1000), air_water_multiple_old.iat[24,6]/(air_water_multiple_old.iat[0,6]/1000)),
        "ground_water_single_old_price": linear_interpolate_2045(ground_water_single_old.iat[24,5]/(ground_water_single_old.iat[0,5]/1000), ground_water_single_old.iat[24,6]/(ground_water_single_old.iat[0,6]/1000)),
        "ground_water_multiple_old_price": linear_interpolate_2045(ground_water_multiple_old.iat[24,5]/(ground_water_multiple_old.iat[0,5]/1000), ground_water_multiple_old.iat[24,6]/(ground_water_multiple_old.iat[0,6]/1000)),
        "air_water_single_new_price": linear_interpolate_2045(air_water_single_new.iat[24,5]/(air_water_single_new.iat[0,5]/1000), air_water_single_new.iat[24,6]/(air_water_single_new.iat[0,6]/1000)),
        "air_water_multiple_new_price": linear_interpolate_2045(air_water_multiple_new.iat[24,5]/(air_water_multiple_new.iat[0,5]/1000), air_water_multiple_new.iat[24,6]/(air_water_multiple_new.iat[0,6]/1000)),
        "ground_water_single_new_price": linear_interpolate_2045(ground_water_single_new.iat[24,5]/(ground_water_single_new.iat[0,5]/1000), ground_water_single_new.iat[24,6]/(ground_water_single_new.iat[0,6]/1000)),
        "ground_water_multiple_new_price": linear_interpolate_2045(ground_water_multiple_new.iat[24,5]/(ground_water_multiple_new.iat[0,5]/1000), ground_water_multiple_new.iat[24,6]/(ground_water_multiple_new.iat[0,6]/1000)),
}
dic_lifetime_2045 = {
        "air_water_single_old_price": linear_interpolate_2045(air_water_single_old.iat[5,5], air_water_single_old.iat[5,6]),
        "air_water_multiple_old_price": linear_interpolate_2045(air_water_multiple_old.iat[5,5], air_water_multiple_old.iat[5,6]),
        "ground_water_single_old_price": linear_interpolate_2045(ground_water_single_old.iat[5,5], ground_water_single_old.iat[5,6]),
        "ground_water_multiple_old_price": linear_interpolate_2045(ground_water_multiple_old.iat[5,5], ground_water_multiple_old.iat[5,6]),
        "air_water_single_new_price": linear_interpolate_2045(air_water_single_new.iat[5,5], air_water_single_new.iat[5,6]),
        "air_water_multiple_new_price": linear_interpolate_2045(air_water_multiple_new.iat[5,5], air_water_multiple_new.iat[5,6]),
        "ground_water_single_new_price": linear_interpolate_2045(ground_water_single_new.iat[5,5], ground_water_single_new.iat[5,6]),
        "ground_water_multiple_new_price": linear_interpolate_2045(ground_water_multiple_new.iat[5,5], ground_water_multiple_new.iat[5,6]),
}
dic_marginal_cost_2045 = {
        "air_water_single_old_price": linear_interpolate_2045(air_water_single_old.iat[23,5] / 1000, air_water_single_old.iat[23,6] / 1000),
        "air_water_multiple_old_price": linear_interpolate_2045(air_water_multiple_old.iat[23,5] / 1000, air_water_multiple_old.iat[23,6] / 1000),
        "ground_water_single_old_price": linear_interpolate_2045(ground_water_single_old.iat[23,5] / 1000, ground_water_single_old.iat[23,6] / 1000),
        "ground_water_multiple_old_price": linear_interpolate_2045(ground_water_multiple_old.iat[23,5] / 1000, ground_water_multiple_old.iat[23,6] / 1000),
        "air_water_single_new_price": linear_interpolate_2045(air_water_single_new.iat[23,5] / 1000, air_water_single_new.iat[23,6] / 1000),
        "air_water_multiple_new_price": linear_interpolate_2045(air_water_multiple_new.iat[23,5] / 1000, air_water_multiple_new.iat[23,6] / 1000),
        "ground_water_single_new_price": linear_interpolate_2045(ground_water_single_new.iat[23,5] / 1000, ground_water_single_new.iat[23,6] / 1000),
        "ground_water_multiple_new_price": linear_interpolate_2045(ground_water_multiple_new.iat[23,5] / 1000, ground_water_multiple_new.iat[23,6] / 1000),
}

dic_2020 = [dic_capacity_cost_overnight_2020, dic_fixom_cost_2020, dic_lifetime_2020, dic_marginal_cost_2020]
dic_2045 = [dic_capacity_cost_overnight_2045, dic_fixom_cost_2045, dic_lifetime_2045, dic_marginal_cost_2045]

val_2020 = []
val_2045 = []
faktoren_2020 = get_agg_price_2020(dic_fixom_cost_2045)[1]
faktoren_2045 = get_agg_price_2045(dic_fixom_cost_2045)[1]

# Berechnungen
for dic in dic_2020:
    val_2020.append(get_agg_price_2020(dic)[0])

for dic in dic_2045:
    val_2045.append(get_agg_price_2045(dic)[0])

print(val_2020, val_2045)
print(faktoren_2020, faktoren_2045)

boiler_small_script.py:

import pandas as pd
import os.path

def get_faktoren_new(df):

    gas_agg = {"single": 0, "multiple": 0}

    for row in df.itertuples():
        bereich = row[1].split(",")[2]
        energie = row[1].split(",")[3]
        try:
            count_insg = int(row[1].split(",")[4])
            count_single = int(row[1].split(",")[5])
        except:
            ValueError

        if bereich == "Sachsen-Anhalt":
            if energie == "Gas":
                gas_agg["single"] += count_single
                gas_agg["multiple"] += (count_insg - count_single)
            else:
                continue

        else:
            continue

    gas_agg_sum = sum(gas_agg.values())
    single_new = gas_agg["single"] / gas_agg_sum
    multiple_new = gas_agg["multiple"] / gas_agg_sum

    return single_new, multiple_new,


def linear_interpolate_2045(wert_1, wert_2):
    zeit_1 = 2040
    zeit_2 = 2050
    wert = wert_1 + (((wert_2 - wert_1) / (zeit_2 - zeit_1)) * (2045 - zeit_1))

    return wert


def get_agg_price_2020(dic):
    # Neubau und Sanierungen allg nach BMI f. Deutschland
    neubau = (0.36 + 0.36 + 0.37 + 0.38 + 0.35 + 0.34 + 0.26 + 0.22 + 0.22 + 0.22 + 0.25 + 0.26 + 0.27 + 0.28 + 0.30 + 0.32 + 0.32 + 0.32 + 0.31 + 0.31) / 20
    altbau = 1 - neubau

    # Verhältnisse Einfamilienhaus-Mehrfamilienhaus nach destatis
        # Daten einlesen
    data_folder = os.path.join("/YOUR/DATA/ROAD/TAKE/ME/HOME/TO/THE/PLACE")
    hp = os.path.join(data_folder, "2023_04_11_ST_thermische_Primärenergie_neubau_2010-2020.csv")
    df = pd.read_csv(hp, encoding="ISO8859-1", delimiter=";", skiprows=range(0, 10), nrows=2150)

    faktoren_new = get_faktoren_new(df)

    # Einfamilinehaus-Mehrfamilienhaus im Altbau Annahme:
    single_faktor = 0.7
    multiple_faktor = 0.3

    single_new_faktor = neubau * faktoren_new[0]
    multiple_new_faktor = neubau * faktoren_new[1]
    single_old_faktor = altbau * single_faktor
    multiple_old_faktor = altbau * multiple_faktor

    single_old = single_old_faktor * dic["single_old_price"]
    multiple_old = multiple_old_faktor * dic["multiple_old_price"]
    single_new = single_new_faktor * dic["single_new_price"]
    multiple_new = multiple_new_faktor * dic["multiple_new_price"]

    preis = single_old + multiple_old + single_new + multiple_new


    return preis


def get_agg_price_2045(dic):
    # Neubau und Sanierungen allg nach BMI f. Deutschland
    neubau = (0.36 + 0.36 + 0.37 + 0.38 + 0.35 + 0.34 + 0.26 + 0.22 + 0.22 + 0.22 + 0.25 + 0.26 + 0.27 + 0.28 + 0.30 + 0.32 + 0.32 + 0.32 + 0.31 + 0.31) / 20
    altbau = 1 - neubau

    # Verhältnisse Einfamilienhaus-Mehrfamilienhaus nach destatis 2020
    gas_single_new = 693 / 763
    gas_multiple_new = (763 - 693) / 763

    # Einfamilinehaus-Mehrfamilienhaus im Altbau Annahme:
    single_faktor = 0.7
    multiple_faktor = 0.3

    single_new_faktor = neubau * gas_single_new
    multiple_new_faktor = neubau * gas_multiple_new
    single_old_faktor = altbau * single_faktor
    multiple_old_faktor = altbau * multiple_faktor

    single_old = single_old_faktor * dic["single_old_price"]
    multiple_old = multiple_old_faktor * dic["multiple_old_price"]
    single_new = single_new_faktor * dic["single_new_price"]
    multiple_new = multiple_new_faktor * dic["multiple_new_price"]

    preis = single_old + multiple_old + single_new + multiple_new

    return preis


# Daten aus DEA:
# einlesen von Daten
data_folder = os.path.join("/ROAD/TO/DATA")
data = os.path.join(data_folder, "technology_data_heating_installations_-_0003.xlsx")

#datensheets
single_old = pd.read_excel(data, "202 Gas boiler, ex single", skiprows=4, nrows=33)
multiple_old = pd.read_excel(data, "202 Gas boiler, ex apart", skiprows=4, nrows=33)
single_new = pd.read_excel(data, "202 Gas boiler, new single", skiprows=4, nrows=33)
multiple_new = pd.read_excel(data, "202 Gas boiler, new apart", skiprows=4, nrows=33)


dic_capacity_cost_overnight_2020 = {
    "single_old_price": (single_old.iat[19,2]*1000)/(single_old.iat[0,2]/1000),
    "multiple_old_price": (multiple_old.iat[19,2]*100)/(multiple_old.iat[0,2]/1000),
    "single_new_price": (single_new.iat[19,2]*1000)/(single_new.iat[0,2]/1000),
    "multiple_new_price": (multiple_new.iat[19,2]*1000)/(multiple_new.iat[0,2]/1000),
}
dic_effiency_2020 = {
    "single_old_price": single_old.iat[3,2],
    "multiple_old_price": multiple_old.iat[3,2],
    "single_new_price": single_new.iat[3,2],
    "multiple_new_price": multiple_new.iat[3,2],
}
dic_fixom_cost_2020 = {
    "single_old_price": single_old.iat[24,2]/(single_old.iat[0,2]/1000),
    "multiple_old_price": multiple_old.iat[24,2]/(multiple_old.iat[0,2]/1000),
    "single_new_price": single_new.iat[24,2]/(single_new.iat[0,2]/1000),
    "multiple_new_price": multiple_new.iat[24,2]/(multiple_new.iat[0,2]/1000),
}
dic_lifetime_2020 = {
    "single_old_price": single_old.iat[5,2],
    "multiple_old_price": multiple_old.iat[5,2],
    "single_new_price": single_new.iat[5,2],
    "multiple_new_price": multiple_new.iat[5,2],
}
dic_marginal_cost_2020 = {
    "single_old_price": single_old.iat[23,2] / 1000,
    "multiple_old_price": multiple_old.iat[23,2] / 1000,
    "single_new_price": single_new.iat[23,2] / 1000,
    "multiple_new_price": multiple_new.iat[23,2] / 1000,
}

dic_capacity_cost_overnight_2045 = {
    "single_old_price": linear_interpolate_2045((single_old.iat[19,5]*1000)/(single_old.iat[0,5]/1000), (single_old.iat[19,6]*1000)/(single_old.iat[0,6]/1000)),
    "multiple_old_price": linear_interpolate_2045((multiple_old.iat[19,5]*1000)/(multiple_old.iat[0,5]/1000), (multiple_old.iat[19,6]*1000)/(multiple_old.iat[0,6]/1000)),
    "single_new_price": linear_interpolate_2045((single_new.iat[19,5]*1000)/(single_new.iat[0,5]/1000), (single_new.iat[19,6]*1000)/(single_new.iat[0,6]/1000)),
    "multiple_new_price": linear_interpolate_2045((multiple_new.iat[19,5]*1000)/(multiple_new.iat[0,5]/1000), (multiple_new.iat[19,6]*1000)/(multiple_new.iat[0,6]/1000)),
}

dic_effiency_2045 = {
    "single_old_price": linear_interpolate_2045(single_old.iat[3,5], single_old.iat[3,6]),
    "multiple_old_price": linear_interpolate_2045(multiple_old.iat[3,5], multiple_old.iat[3,6]) ,
    "single_new_price":  linear_interpolate_2045(single_new.iat[3,5], single_new.iat[3,6]),
    "multiple_new_price": linear_interpolate_2045(multiple_new.iat[3,5], multiple_new.iat[3,6])
}

dic_fixom_cost_2045 = {
    "single_old_price": linear_interpolate_2045((single_old.iat[24,5])/(single_old.iat[0,5]/1000), (single_old.iat[24,6])/(single_old.iat[0,6]/1000)),
    "multiple_old_price":  linear_interpolate_2045((multiple_old.iat[24,5])/(multiple_old.iat[0,5]/1000), (multiple_old.iat[24,6])/(multiple_old.iat[0,6]/1000)),
    "single_new_price": linear_interpolate_2045((single_new.iat[24,5])/(single_new.iat[0,5]/1000), (single_new.iat[24,5])/(single_new.iat[0,5]/1000)),
    "multiple_new_price": linear_interpolate_2045((multiple_new.iat[24,5])/(multiple_new.iat[0,5]/1000), (multiple_new.iat[24,6])/(multiple_new.iat[0,6]/1000)),
}
dic_lifetime_2045 = {
    "single_old_price": linear_interpolate_2045(single_old.iat[5,5], single_old.iat[5,6]),
    "multiple_old_price": linear_interpolate_2045(multiple_old.iat[5,5], multiple_old.iat[5,6]),
    "single_new_price": linear_interpolate_2045(single_new.iat[5,5], single_new.iat[5,6]),
    "multiple_new_price": linear_interpolate_2045(multiple_new.iat[5,5], multiple_new.iat[5,6]),
}

dic_marginal_cost_2045 = {
    "single_old_price": linear_interpolate_2045(single_old.iat[23,2] / 1000, single_old.iat[23,2] / 1000),
    "multiple_old_price": linear_interpolate_2045(multiple_old.iat[23,2] / 1000, multiple_old.iat[23,2] / 1000),
    "single_new_price": linear_interpolate_2045(single_new.iat[23,2] / 1000,single_new.iat[23,2] ),
    "multiple_new_price": linear_interpolate_2045(multiple_new.iat[23,2] / 1000, multiple_new.iat[23,2] / 1000),
}

dic_2020 = [dic_capacity_cost_overnight_2020, dic_effiency_2020, dic_fixom_cost_2020, dic_lifetime_2020, dic_marginal_cost_2020]
dic_2045 = [dic_capacity_cost_overnight_2045,dic_effiency_2045, dic_fixom_cost_2045, dic_lifetime_2045, dic_marginal_cost_2045]
val_2020 = []
val_2045 = []

# Berechnungen
for dic in dic_2020:
    val_2020.append(get_agg_price_2020(dic))

for dic in dic_2045:
    val_2045.append(get_agg_price_2045(dic))

print(val_2020, val_2045)