Seite 1 von 1
while Schleife
Verfasst: Montag 22. Juli 2019, 12:44
von Hias_L
Hallo Leute,
ich probiere folgende Schleife zum laufen zu kriegen:
df_1 ist ein DataFrame (356,22) mit mehreren Jahren (2014 bis 2018)
Die "Rho" Werte sollen addiert werden und die Summen jedes Datensatzes in einer zusätzlichen Spalte am Ende angefügt werden.
Code: Alles auswählen
df_1 = df
varJahr = 2014
while varJahr <= 2018:
print(varJahr)
df_Rho_Summe = df_1['Rho_Summe'] = np.where(df_1['Jahr'] == varJahr,
df_1['Rho-Invest'] + df_1['Rho-WI'] + df_1['Rho-EU'] +
df_1['Rho-BMBF'] + df_1['Rho-BUND'] + df_1['Rho-Land'] +
df_1['Rho-Zuk'] - df_1['Rho-VE'] + df_1['Rho-RV'],
np.nan)
varJahr = varJahr +1
df_1 = df_1 + df_Rho_Summe
print('Ende')
Als Ergebnis erhalte ich zwar die neue Spalte 'Rho_Summe' hinten an df_1. Die Summe jedoch nur für 2014.
Aus dem ValueError: "Unable to coerce to Series, length must be 22: given 356"
werde ich nicht leider ganz schlau.
Ich hoffe das ist einigermaßen verständlich.
Vielen Dank schon einmal
Hias
Re: while Schleife
Verfasst: Montag 22. Juli 2019, 13:37
von Sirius3
Warum nennst Du `df` in `df_1` um. `df_1` ist ein genauso schlechter Name wie `df`. Benutze aussagekräfte Variabelnnamen! Was soll varJahr bedeuten? Ich kennen nur Wahljahr.
Was Denkst Du macht `df_1 = df_1 + df_Rho_Summe`?
Die while-Schleife sollte eine for-Schleife sein und wenn ich richtige rate, was Du eigentlich machen willst, ist die Schleife komplett unnötig.
Re: while Schleife
Verfasst: Dienstag 23. Juli 2019, 08:01
von Hias_L
Die Benennung ist nicht gut, stimmt! Ich möchte vorhandenes nacherstellen und daher bin ich nicht einfallsreich.
Die Erstellung geht ohne Schleife problemlos. Die while-Bedingung geht ohne Schleife auch problemlos.
Eigentlich möchte ich die while Schleife in Kombination mit where hinbekommen.
Re: while Schleife
Verfasst: Dienstag 23. Juli 2019, 08:43
von Sirius3
Warum brauchst Du where wenn Du sowieso für alle Werte die Summe ausrechnen willst?
Kannst Du ein einfaches Beispiel mit Daten und gewolltem Ergebnis erstellen?
Re: while Schleife
Verfasst: Dienstag 23. Juli 2019, 09:39
von Hias_L
Es geht mir rein um das Verständnis. Normal würde ich alle erstellen und dann filtern.
Ich hab es fast:
Code: Alles auswählen
df_1 = df
varJahr = 2014
while varJahr <= 2018:
print(varJahr)
df_1['Rho_Summe'] = np.where(df_1['Jahr'] == varJahr,
df_1['Rho-Invest'] + df_1['Rho-WI'] + df_1['Rho-EU'] +
df_1['Rho-BMBF'] + df_1['Rho-BUND'] + df_1['Rho-Land'] +
df_1['Rho-Zuk'] - df_1['Rho-VE'] + df_1['Rho-RV'], np.nan)
varJahr = varJahr +1
print('Ende')
- Jetzt fügt er die Spalte 'Rho_Summe' an.
- Nur in dem letztmöglichen Jahr, hier 2018, trägt er die gewünschte Summe in Spalte 'Rho_Summe' in df_1 ein. Wenn ich z.B. 2016 auswähle, habe ich die Summe in 2016 und davor und danach "nan".
Die vorherigen Jahre werden mit "nan" überschrieben.
Ein einfaches Beispiel kann ich natürlich gerne erstellen.
Sehe ich das richtig?
Re: while Schleife
Verfasst: Dienstag 23. Juli 2019, 09:47
von Sirius3
Es wird `nan` geschrieben, weil Du es so angegeben hast.
Daher nochmal die Frage, warum Du überhaupt `where` benutzt?
Re: while Schleife
Verfasst: Dienstag 23. Juli 2019, 10:04
von __blackjack__
Wobei man selbst wenn man die ``while``-Schleife bräuchte, sie sehr wahrscheinlich nicht bräuchte, weil man das dann mit `groupby()` machen würde.
Re: while Schleife
Verfasst: Dienstag 23. Juli 2019, 12:55
von Hias_L
Ok, ok ich verschone Euch mit meiner 'while'-Schleife
Ich kriege es ja hin, mich hätte es ja rein wegen der Syntax interessiert.
Eine aller letzte Frage: Ich gebe ja das np.nan an. Kann man an der Stelle auch angeben, dass nichts unternommen werden soll ?
Re: while Schleife
Verfasst: Dienstag 23. Juli 2019, 13:14
von __blackjack__
@Hias_L: Was heisst ”nichts”?
Re: while Schleife
Verfasst: Dienstag 23. Juli 2019, 13:32
von Sirius3
Was willst Du anstatt der while-Schleife denn tun?
Re: while Schleife
Verfasst: Dienstag 23. Juli 2019, 14:22
von Hias_L
Mit nichts meine ich einfach keine Berücksichtigung an der Stelle, damit ein ggf. vorhandener Wert nicht überschrieben wird.
Die Jahre werden doch aufsummiert pro Jahr/Durchlauf, bis zum letzten angegebenen Jahr (<=2018). Durch das np.nan wird das nicht aktuell betrachtete Jahr mit nan wieder überschrieben. Oder sehe ich das falsch?
@Sirius3 Ich tüftle weiter rum
Re: while Schleife
Verfasst: Dienstag 23. Juli 2019, 14:42
von Sirius3
Von Deinem Code bleibt das hier übrig:
Code: Alles auswählen
df['Rho_Summe'] = (df['Rho-Invest'] + df['Rho-WI'] + df['Rho-EU'] +
df['Rho-BMBF'] + df['Rho-BUND'] + df['Rho-Land'] +
df['Rho-Zuk'] - df['Rho-VE'] + df['Rho-RV'])
print('Ende')
alles andere stört nur.
Re: while Schleife
Verfasst: Mittwoch 24. Juli 2019, 08:27
von Hias_L
Damit hat man alle DS ja.
Danke für Eure Hilfe!
Gruß und schönen Tag
Hias