Ausgabe
Angenommen, es gibt einen DataFrame wie z
import pandas as pd
import numpy as np
df = pd.DataFrame({'A':[21, 11, 31, 45],
'B':[10, 20, 10, 11],
'C':[57, 22, 34, 10]})
A B C
0 21 10 57
1 11 20 22
2 31 10 34
3 45 11 10
Ich möchte eine Funktion schreiben, die mit Lambda verwendet werden kann, wie z
def WeightedScore(x, probs):
total = 0
for i in range(len(probs)):
total += x[i]*probs[i]
return total
df ['out'] = df.apply(lambda x: WeightedScore(x['A'], x['B'], x['C'], probs = (0.2, 0.3, 0.5)), axis = 1)
Aber ich habe so einen Fehler bekommen
TypeError: WeightedScore() got multiple values for argument 'probs'
Irgendwelche Vorschläge? Vielen Dank im Voraus!
Lösung
Sie übergeben hier also mehrere Argumente:
df.apply(lambda x: WeightedScore(x['A'], x['B'], x['C'], probs = (0.2, 0.3, 0.5)), axis = 1)
Du meintest wahrscheinlich so etwas wie:
df.apply(lambda x: WeightedScore([x['A'], x['B'], x['C']], probs = (0.2, 0.3, 0.5)), axis = 1)
Aber Sie sollten hier zunächst nicht verwenden .apply
. Verwenden Sie stattdessen vektorisierte Operationen:
df['out'] = ((0.2, 0.3, 0.5) * df).sum(axis=1)
Beantwortet von – juanpa.arrivillaga
Antwort geprüft von – Clifford M. (FixError Volunteer)