Verwenden Sie Pandas groupby () + apply () mit Argumenten

9

Ich möchte df.groupby() in Kombination mit apply() verwenden, um eine Funktion für jede Zeile pro Gruppe anzuwenden.

Normalerweise verwende ich den folgenden Code, der normalerweise funktioniert (beachte, dass dies ohne groupby() ist):

%Vor%

Mit dem groupby() habe ich folgendes versucht:

%Vor%

Allerdings erhalte ich den folgenden Fehler:

  

TypeError: myFunction () hat ein unerwartetes Schlüsselwortargument 'args'

erhalten

Daher lautet meine Frage: Wie kann ich groupby() und apply() mit einer Funktion verwenden, die Argumente benötigt?

    
beta 18.04.2017, 22:40
quelle

2 Antworten

8

pandas.core.groupby.GroupBy.apply hat NICHT < strong> Name Parameter args , aber pandas.DataFrame.apply hat es.

Versuchen Sie es also:

%Vor%

oder wie von @Zero :

%Vor%

Demo:

%Vor%

Wenn Sie GroupBy.apply verwenden, können Sie entweder eine benannte Argument übergeben:

%Vor%

ein Tupel von Argumenten:

%Vor%     
MaxU 18.04.2017, 22:41
quelle
2

Einige Verwirrung darüber, warum die Verwendung eines args -Parameters einen Fehler auslöst, könnte auf die Tatsache zurückzuführen sein, dass pandas.DataFrame.apply hat einen args -Parameter (ein Tupel), während pandas.core.groupby.GroupBy.apply nicht.

Wenn Sie also .apply auf einem DataFrame selbst aufrufen, können Sie dieses Argument verwenden; Wenn Sie .apply für ein groupby-Objekt aufrufen, können Sie nicht.

In @ MaxU's Antwort wird der Ausdruck lambda x: myFunction(x, arg1) an func übergeben (der erste Parameter); Es ist nicht erforderlich, zusätzliche *args / **kwargs anzugeben, da arg1 in Lambda angegeben ist.

Ein Beispiel:

%Vor%     
Brad Solomon 16.10.2017 13:01
quelle