Seite 1 von 1

Neue Spalte in DF einfügen als Berechnung

Verfasst: Montag 11. März 2019, 16:10
von Lizzy
Hallo,
ich habe einen DataFrame der wie folgt aussieht (leider funktioniert das hier mit dem Bilder einfügen nicht, ich hoffe man kann es erkennen: Eigentlich ist nur wichtig dass es eine Spalte gibt die 'beta' heißt):

muL sdL mu A B w beta
79 142.283545 257.856675 53.778125 1 1 0.008738 0.006882
316 30.771996 66.595677 6.715000 2 2 0.001091 0.001062
485 6.656955 12.734483 1.452667 1 1 0.000236 0.000183
396 36.992691 897.387078 2.482787 3 2 0.000403 0.000282
167 1.812622 8.536685 0.370000 1 1 0.000060 0.000027

Ich möchte nun eine neue Spalte mit dem Namen Penalty einfügen. Der Wert is abhängig von dem Unterschied zwischen einem fixen Wert ("average") und dem Eintrag in der Spalte "beta" der jeweiligen Zeile im DF. Ich habe es folgendermaßen probiert:

Code: Alles auswählen

average = 0.95/153
betadf['penalty']=0
if (betadf['beta']-average) > 0:
    betadf['penalty']=0
else:
    betadf['penalty']=(betadf['beta']-average)
Ich bekomme den Fehler: "The truth value of a Series is ambiguous"

Weiß jemand voran das liegt?

Re: Neue Spalte in DF einfügen als Berechnung

Verfasst: Montag 11. März 2019, 17:36
von ThomasL
Nun ja, weil das so nicht geht :-)
So geht es:

Code: Alles auswählen

betadf['penalty'] = 0
betadf['penalty'].where(betadf['beta']-average <= 0, betadf['beta']-average, inplace=True)

Re: Neue Spalte in DF einfügen als Berechnung

Verfasst: Montag 11. März 2019, 17:48
von Lizzy
Vielen Dank 😊

Re: Neue Spalte in DF einfügen als Berechnung

Verfasst: Montag 11. März 2019, 17:49
von Sirius3
Der Fehler sagt eigentlich genau, warum das nicht geht, weil mehrere Werte nicht größer als ein Zahl sein können: Ist jetzt 3 und -5 größer als 0 oder nicht?
Eigentlich willst Du clippen:

Code: Alles auswählen

betadf['penalty'] = (betadf['beta']-average).clip(upper=0)

Re: Neue Spalte in DF einfügen als Berechnung

Verfasst: Montag 11. März 2019, 18:27
von Lizzy
@Sirius3: Ich bekomme bei Deiner Methode die richtigen Werte, nur mit einem Minus davor. Was macht das clippen anders?

Re: Neue Spalte in DF einfügen als Berechnung

Verfasst: Montag 11. März 2019, 18:44
von Sirius3
Clipping macht genau das, was es sagt: alle Werte von (betadf['beta']-average), die größer als 0 sind auf 0 setzen. Damit bleiben nur negative Werte übrig. So habe ich Deine if-Abfrage auch gelesen.

Re: Neue Spalte in DF einfügen als Berechnung

Verfasst: Montag 11. März 2019, 18:48
von Lizzy
Achso, ja im Prinzip möchte ich genau das, nur soll der Unterschied als positiver Wert abgebildet werde

Re: Neue Spalte in DF einfügen als Berechnung

Verfasst: Montag 11. März 2019, 19:19
von Sirius3
Dann mußt Du halt die Formeln anpassen.

Re: Neue Spalte in DF einfügen als Berechnung

Verfasst: Montag 11. März 2019, 19:44
von Lizzy
Danke :)