Ich habe Probleme, eine benutzerdefinierte Funktion in Pandas "anzuwenden". Wenn ich die Funktion teste, übergebe ich direkt die Werte und die Antwort wird korrekt zurückgegeben. Wenn ich jedoch versuche, die Spaltenwerte zu übergeben, erhalte ich den Fehler "Der Wahrheitswert einer Serie ist mehrdeutig. Verwenden Sie a.empty, a.bool(), a.item(), a.any() oder a. alle()."Benutzerdefinierte Funktion in Pandas anwenden, Werte mehrere Spalten übergeben
def feez (rides, plan):
pmt4 = 200
inc4 = 50 #number rides included
min_rate4 = 4
if plan == "4 Plan":
if rides > inc4:
fee = ((rides - inc4) * min_rate4) + pmt4
else:
fee = pmt4
return (fee)
else:
return 0.1
df['fee'].apply(feez(df.total_rides, df.plan_name))
die Werte Passing direkt arbeitet, das heißt Feez (800, "4-Plan"), kehrt 3200
Allerdings habe ich eine Fehlermeldung erhalten, wenn ich versuche, die Funktion über anzuwenden.
Ich bin ein Neuling und vermute, dass meine Syntax schlecht geschrieben ist. Irgendwelche Ideen sehr geschätzt. TIA. Eli
Vectorize gut funktioniert, danke. – eli
Der Lambda warf Fehler, sehr interessiert, wenn Sie wissen warum? Datei "C: \ Benutzer \ runner \ Anaconda3 \ lib \ site-packages \ Pandas \ core \ frame.py", Linie 4950, in _apply_standard Ergebnisse [i] = func (v) Datei „ ", Zeile 1, in gett ['Gebühr'] = gett.apply (Lambda x: Gebühr (x ['total_rides'], x ['plan_name']))) Datei" C : \ Benutzer \ runner \ Anaconda3 \ lib \ site-packages \ pandas \ core \ series.py ", Zeile 623, in __getitem__ result = self.index.get_value (self, Schlüssel) –
eli
Ich habe die" axis = 1 "hinzugefügt Parameter zur lamdba-Lösung, es funktioniert auch. Nochmals vielen Dank für die Klärung und Ideen. – eli