[FIXED] Pandas Lambda mit mehreren Argumenten

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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like