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):
Mit dem groupby()
habe ich folgendes versucht:
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?
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:
ein Tupel von Argumenten:
%Vor% 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%Tags und Links python pandas apply dataframe pandas-groupby