2017-07-21 4 views
0

Ich habe eine wunderbare Lambda-Funktion von einem Benutzer vor einer Weile erhalten.Lambda-Funktion Notation in Pandas

actresses_modified['Winner_Count'] = actresses_modified.apply(lambda x: actresses_modified.Name.value_counts()[x.Name], axis=1) 

Der Datenrahmen, auf den er wie folgt aussieht angewendet wird:

Year Award   Winner Name 
2 1928 Best Actress 0.0  Louise Dresser 
3 1928 Best Actress 1.0  Janet Gaynor 
4 1928 Best Actress 0.0  Gloria Swanson 
40 1929 Best Actress 0.0  Ruth Chatterton 
41 1929 Best Actress 0.0  Betty Compson 

Das Problem ist, habe ich vergessen, wie es funktioniert (ich hatte dieses „for fun“ Projekt Schritt weg) und Genauer gesagt, was genau passiert mit [x.Name].

Die Zeile actresses_modified.Name.value_counts() von mir selbst gibt mir die Anzahl aller Schauspielerin Namen im Datenrahmen. Was bedeutet [x.Name] auf Englisch, wie schafft es es, alle 1en neben dem Namen jeder Person in der Spalte "Winner" des Datenrahmens zusammenzufassen und eine korrekte Anzahl der Gewinne zurückzugeben? Genauso wichtig ist, dass diese Art von Syntax einen Namen hat? Meine Google-Suche ergab nada.

Irgendwelche Gedanken würden geschätzt werden?

+1

Ich möchte nicht sicher sagen, wie ich gerade jetzt in Pandas und numpy, aber es sieht aus wie Lambda wird auf jedes Element im Datenrahmen angewendet und es ruft die 'value_counts' Methode und holt dann jede Schauspielerin aus dem Dataframe mit ihrem Namen (' x.Name'). Wenn 'value_counts' also die Daten nicht speichert, klingt es so, als würde es jedes Mal unnötige Arbeit verrichten. Macht das Sinn für dich? Ich habe vielleicht keine Erfahrung damit, aber ich bin mir sicher, 95% sind sicher, dass das passiert. –

Antwort

1

Hier bin ich mir nicht sicher, ob ich mich im Kommentar klar gemacht habe. Also die apply Methode "Wendet Funktion entlang der Eingabeachse von DataFrame." Also lassen Sie uns sagen, der Einfachheit halber, dass wir eine Sammlung von Schauspielerin Objekte genannt actresses_modified und es sieht wie folgt aus:

actresses_modified = [<Actress>, <Actress>, <Actress>, <Actress>] 

Nehmen wir an, dass es sich dabei, wie die Actress definiert:

class Actress: 
    Name = "Some String" 

So dann haben wir unsere Lambda-Funktion, die auf jede Schauspielerin in der Sammlung als x angewendet wird. value_counts() gibt "Objekt zurück, das Zählungen von eindeutigen Werten enthält."

Also, wenn wir value_counts() für jede Schauspielerin anrufen, erhalten wir, dass die Schauspielerin den Wert nach Schlüssel zählt. Nehmen wir an, dass value_counts() eine dict mit Schauspielerin Namen zurückgibt und ihre „count“ und es sieht wie folgt aus:

counts = { 
    'Jane Doe': 1, 
    'Betty Ross': 3, 
} 

Und wir haben unsere Schauspielerin Objekte mit der Schauspielerin 1en Name ist „Jane Doe“, so dass, wenn wir value_counts()[x.Name] wir nennen 't tun counts["Jane Doe"], die 1. zurückgeben würde.

+0

Vielen Dank für das erweiterte Beispiel. Das ist ein langer Weg, Dinge aufzuräumen! – Ryan

+1

Großartig, glücklich zu helfen. Ich lese gerade "Python for Data Analysis", also war es ein gutes Timing. –