3 votes

Différence entre les fonctions apply() et aggregate() de Pandas

Y a-t-il une différence dans le (type) de la valeur de retour entre la fonction DataFrame.aggregate() et la fonction DataFrame.apply() si je passe simplement une fonction du type

func=lambda x: x**2

parce que les valeurs de retour semblent être à peu près les mêmes. Et la documentation ne dit que :

apply() --> applied : Series ou DataFrame

aggregate() --> agrégé : DataFrame

7voto

ayhan Points 33889

Il existe deux versions de agg (abréviation de aggregate) et de apply : La première est définie sur les objets groupby et la seconde est définie sur les DataFrames.

Si vous considérez groupby.agg y groupby.apply la principale différence serait que la demande est flexible ( docs ):

Certaines opérations sur les données groupées peuvent ne pas correspondre à l'une ou l'autre des catégories suivantes catégories d'agrégation ou de transformation. Ou encore, vous pouvez simplement vouloir que GroupBy déduire comment combiner les résultats. Dans ce cas, utilisez la fonction apply, qui peut remplacer à la fois aggregate et transform dans de nombreux cas d'utilisation standard. cas d'utilisation standard.

Remarque : apply peut agir comme une fonction de réduction, de transformation ou de filtrage, en fonction de ce qui est passé à apply. Ainsi, en fonction du chemin et de ce que vous regroupez exactement. Ainsi, la ou les colonnes regroupées peuvent être incluses dans la sortie ainsi que définir les indices.

Voir Python Pandas : Comment retourner des listes groupées dans une colonne comme un dict ? par exemple pour une illustration de la manière dont le type de retour est automatiquement modifié.

groupby.agg d'autre part, est très bon pour appliquer les fonctions optimisées de Cython (c'est-à-dire être capable de calculer 'sum' , 'mean' , 'std' etc. très rapidement). Il permet également de calculer plusieurs fonctions (différentes) sur différentes colonnes. Par exemple,

df.groupby('some_column').agg({'first_column': ['mean', 'std'],
                               'second_column': ['sum', 'sem']}

calcule la moyenne et l'écart-type sur la première colonne et la somme et l'erreur standard de la moyenne sur la deuxième colonne. Voir dplyr summarize équivalent en pandas pour d'autres exemples.

Ces différences sont également résumées dans Quelle est la différence entre la fonction pandas agg et la fonction apply ? Mais celui-ci se concentre sur les différences entre groupby.agg y groupby.apply .

DataFrame.agg est nouveau dans la version 0.20. Auparavant, nous n'étions pas en mesure d'appliquer plusieurs fonctions différentes à des colonnes différentes, car cela n'était possible qu'avec les objets groupby. Désormais, vous pouvez résumer un DataFrame en calculant plusieurs fonctions différentes sur ses colonnes. Exemple de Existe-t-il un équivalent pandas de dplyr::summarise ? :

iris.agg({'sepal_width': 'min', 'petal_width': 'max'})

petal_width    2.5
sepal_width    2.0
dtype: float64

iris.agg({'sepal_width': ['min', 'median'], 'sepal_length': ['min', 'mean']})

        sepal_length  sepal_width
mean        5.843333          NaN
median           NaN          3.0
min         4.300000          2.0

Cela n'est pas possible avec DataFrame.apply . Il va soit colonne par colonne, soit ligne par ligne et exécute la même fonction sur cette colonne/ligne. Pour une seule fonction comme lambda x: x**2 ils produisent les mêmes résultats mais leur utilisation prévue est très différente.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X