Pourquoi toutes les opérations groupby ne fonctionnent pas avec transform
Le code suivant fonctionne :
df.groupby('A').apply(lambda x: (x['C'] - x['D']).mean())
mais pas ce qui suit :
df.groupby('A').transform(lambda x: (x['C'] - x['D']).mean())
La raison en est que apply et transform fonctionnent différemment.
apply
- La méthode apply() applique une fonction à chaque groupe dans un DataFrame.
- La fonction peut prendre un seul argument, qui est le groupe, ou elle peut prendre plusieurs arguments, qui sont les colonnes du groupe.
- La fonction peut renvoyer un seul valeur, ou elle peut renvoyer une série ou un DataFrame.
- Si la fonction renvoie une seule valeur, alors le résultat sera une série.
- Si la fonction renvoie une série ou un DataFrame, alors la le résultat sera un DataFrame.
transform
- La méthode transform() applique une fonction à chaque ligne d'un groupe.
- La fonction peut prendre un seul argument, qui est la ligne, ou elle peut prendre plusieurs arguments, qui sont les colonnes de la ligne.
- La fonction doit renvoyer une seule valeur.
- Le résultat de la fonction sera une série.
Dans l'exemple de code, la méthode apply() est utilisée pour calculer la moyenne de la différence entre les colonnes C et D pour chaque groupe.
- La méthode transform() ne peut pas être utilisée pour calculer cette valeur car la fonction renvoie une série, pas une seule valeur.
Pour calculer la moyenne de la différence entre le C et D pour chaque groupe utilisant la méthode transform(), la fonction doit être modifiée pour renvoyer une seule valeur.
- Cela peut être fait en utilisant la méthode Mean() sur la série renvoyée par le fonction.
- Le code suivant montre comment procéder :
df.groupby('A').transform(lambda x: (x['C'] - x['D']).mean())
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
Déclaration:Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn