Dictionary und pandas

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
superschlau
User
Beiträge: 26
Registriert: Mittwoch 4. April 2018, 09:12

Hallo zusammen
Ich versuche eine Berechnung in pandas unter Verwendung von Funktionen durchzuführen.

Code: Alles auswählen

df['Bezirk2022'] = steuerbetragBezirk(periodeFuss, df["EEStGem2019"], df["BEZIRK"])
Wobei df natürlich eine DataFrame ist.

Die Funktion steuerbetragBezirk sieht wie folgt aus:

Code: Alles auswählen

def steuerbetragBezirk(periode, einfachesteuer, bezirk):
    betrag = bezirkFuss[periode][bezirk] * einfachesteuer
    return round(betrag * 20, 0) / 20
Dabei verwende ich ein Dictionary bezirkFuss, das so aussieht:

Code: Alles auswählen

bezirkFuss = {2019: {'Schwyz': 0.55, 'Gersau': 2.2, 'March': 0.45, 'Einsiedeln': 2.3, 'Küssnacht': 1.65, 'Höfe': 0.15},
              2020: {'Schwyz': 0.5 , 'Gersau': 2.1, 'March': 0.45, 'Einsiedeln': 2.3, 'Küssnacht': 1.65, 'Höfe': 0.15},
              2021: {'Schwyz': 0.5 , 'Gersau': 2.1, 'March': 0.45, 'Einsiedeln': 2.3, 'Küssnacht': 1.65, 'Höfe': 0.15},
              2022: {'Schwyz': 0.5 , 'Gersau': 1.9, 'March': 0.43, 'Einsiedeln': 2.2, 'Küssnacht': 1.65, 'Höfe': 0.14},
              2023: {'Schwyz': 0.4 , 'Gersau': 1.9, 'March': 0.4 , 'Einsiedeln': 2.2, 'Küssnacht': 1.65, 'Höfe': 0.14},
             }

Mit dieser Anwendung bekomme ich eine Fehlermeldung:

Code: Alles auswählen

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In [270], line 2
      1 df['Kanton2022'] = steuerbetragKanton(periodeFuss, df["EEStKt2019"])
----> 2 df['Bezirk2022'] = steuerbetragBezirk(periodeFuss, df["EEStGem2019"], df["BEZIRK"])
      3 df['Gemeindek2022'] = steuerbetragGemeinde(periodeFuss, df["EEStGem2019"], df["GEMEINDE"])

Cell In [266], line 8, in steuerbetragBezirk(periode, einfachesteuer, bezirk)
      6 def steuerbetragBezirk(periode, einfachesteuer, bezirk):
      7     #betrag = bezirkFuss[str(periode)][bezirk] * einfachesteuer
----> 8     betrag = bezFuss[bezirk] * einfachesteuer
      9     return round(betrag * 20, 0) / 20

TypeError: unhashable type: 'Series'
Ich sehe das Problem nicht. Kann mir jemand weiterhelfen??
Benutzeravatar
__blackjack__
User
Beiträge: 13160
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@superschlau: Du hast ein Wörterbuch das Zahlen auf Werte abbildet und versuchst da mit einem `Series`-Objekt, also einer ganzen Spalte aus einem DataFrame zuzugreifen. Das geht nicht.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Antworten