Ajouter une colonne au DataFrame GroupBy à l'aide de Pandas Transform
Lorsque vous travaillez avec des opérations groupby dans pandas, il est souvent utile d'ajouter une nouvelle colonne au trame de données résultante. Une méthode pour y parvenir consiste à utiliser la fonction .map(), comme démontré dans l'exemple. Cependant, une approche alternative et plus simple consiste à utiliser la fonction .transform().
.transform() nous permet d'appliquer une fonction à chaque groupe de la trame de données et de renvoyer une série avec les résultats. La série renvoyée aura un index aligné sur le dataframe d'origine.
Pour illustrer, commençons par le dataframe fourni :
df = pd.DataFrame({'c': [1, 1, 1, 2, 2, 2, 2], 'type': ['m', 'n', 'o', 'm', 'm', 'n', 'n']})
Notre objectif est de compter les valeurs de type pour chaque c et d'ajouter une colonne de la taille de c.
g = df.groupby('c')['type'].value_counts().reset_index(name='t')
Ce code compte les valeurs de chaque groupe et crée une nouvelle colonne nommée t.
Pour ajouter la colonne de taille à l'aide de .transform(), nous pouvons procédez comme suit :
g['size'] = df.groupby('c')['type'].transform('size')
.transform('size') applique la fonction size à chaque groupe, qui renvoie la taille de chaque groupe. La série résultante est alignée sur l'index du dataframe d'origine, ce qui nous permet de l'ajouter en tant que nouvelle colonne à g.
La sortie sera un dataframe avec une colonne supplémentaire nommée size :
c type t size 0 1 m 1 3 1 1 n 1 3 2 1 o 1 3 3 2 m 2 4 4 2 n 2 4
L'utilisation de .transform() fournit un moyen plus concis et plus simple d'ajouter une colonne à la trame de données d'origine à partir d'une agrégation groupby.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3