Seite 1 von 1
python pandas
Verfasst: Montag 5. Dezember 2022, 17:34
von eli
Hallo,
Habe eine df der folgendermaßen aussieht:
typ_bw ... bez_str .... laenge_bw
bruecke ... Dorenerstraße .....17.0
bruecke .... Bregenzerwaldstraße .....35.0
tunnel .... Bregenzerwaldstraße .....5.0
.
.
.
und eine liste die alle straßen bezeichnungen (bez_str) enthält:
route = ["Bregenzerwaldstraße", "Faschinastraße"]
möchte jetzt die Gesamtlänge der route berechnen
Meine Idee war das mit einem for loop zu machen, allerdings funktioniert es bei mehreren Elementen in der Liste nicht mehr:
Code: Alles auswählen
for element in route_1:
bridge_distance_route_1 = df.loc[df['bez_str'] == element, 'laenge_bw'].sum()
Re: python pandas
Verfasst: Montag 5. Dezember 2022, 18:11
von __blackjack__
@eli: „Funktioniert nicht“ ist ja eigentlich immer eine recht dürftige Beschreibung des Problems. Was funktioniert denn nicht? Was erwartest Du als Ergebnis und was bekommst Du stattdessen? Oder bekommst Du gar eine Ausnahme? Dann solltest Du auch verraten welche. Am besten immer den Traceback 1:1 in den Beitrag kopieren.
Hier ist das Problem recht offensichtlich: Du bekommst immer das Ergebnis vom letzten Eintrag in `route_1`, denn die Schleife bindet sich bei jedem Durchlauf das aktuelle Ergebnis an einen Namen, der dann am Ende halt das Ergebnis vom letzten Durchlauf hat. Vielleicht möchtest Du vor der Schleife den Wert mit 0 initialisieren und die Teilergebnisse dann da drauf addieren. Besser wäre es aber das Pandas machen zu lassen. Also nicht jeden Abschnitt einzeln zu selektieren sondern vom Dataframe alle Abschnitte abzufragen und dann zu addieren. Also nicht ``== element`` sondern die entsprechende Methode die prüft ob `bez_str` in der Menge der Strassenbezeichner in der Route vorkommt.
Die `_1` an den Namen macht mir übrigens Sorgen. Die sollte da nicht stehen.
Re: python pandas
Verfasst: Montag 5. Dezember 2022, 18:25
von eli
Code: Alles auswählen
def print_shorter_bridge_distance(df, route_1, route_2):
for element in route_1:
bridge_distance_route_1 = df.loc[df['bez_str'] == element, 'laenge_bw'].sum()
for element in route_2:
bridge_distance_route_2 = df.loc[df['bez_str'] == element, 'laenge_bw'].sum()
print(bridge_distance_route_1, bridge_distance_route_2)
print_bridge_distance(df, ["Eichenberger Straße", "Faschinastraße"], ["Kennelbacher Straße", "Bregenzerwaldstraße", "Schollenstraße"])
geprintet wird : 0.0 0.0
eigentlich sollte die gesamt Länge der Routen, die aus mehreren Straßenteilen besteht, wobei die Straßenteile mehrmals vorkommen im df.
![Bild]()
Re: python pandas
Verfasst: Montag 5. Dezember 2022, 19:56
von __blackjack__
@eli: Also grundsätzlich hat der Code das von mir beschriebene Problem, dass an die beiden Namen immer nur der Wert vom letzten Schleifendurchlauf gebunden wird.
Und was die 0en angeht, wäre die Frage wie denn die Definition von der `print_bridge_distance()`-Funktion aussieht.
