Maison  >  Article  >  développement back-end  >  Comment puis-je combiner des chaînes au sein de Pandas Groupby pour des valeurs uniques ?

Comment puis-je combiner des chaînes au sein de Pandas Groupby pour des valeurs uniques ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-25 00:27:02282parcourir

How Can I Combine Strings Within Pandas Groupby for Unique Values?

Comment obtenir une union de chaînes à l'aide de Pandas Groupby

Lors du regroupement de données à l'aide de la méthode groupby de Pandas, les colonnes numériques peuvent être facilement agrégées à l'aide fonctionne comme une somme. Cependant, l’agrégation de colonnes de chaînes pose un défi, car une simple concaténation n’est pas toujours souhaitée. Cet article explore les méthodes permettant d'obtenir une union de chaînes au sein des groupes.

Problème :

Considérez le DataFrame suivant :

A B C
1 0.749065 This
2 0.301084 is
3 0.463468 a
4 0.643961 random
1 0.866521 string
2 0.120737 !

Application de df. groupby("A")["B"].sum() renvoie la somme des valeurs numériques dans la colonne B pour chaque groupe. Cependant, appeler df.groupby("A")["C"].sum() sur la colonne de chaîne C ne fonctionne pas comme prévu, ce qui entraîne une concaténation de chaînes.

Solution :

Fonction personnalisée :

Une approche consiste à définir une fonction personnalisée qui regroupe les valeurs de chaîne au sein de groupes. Cette fonction peut ensuite être appliquée au DataFrame à l'aide de la méthode apply(). Par exemple :

<code class="python">def f(x):
    return Series(dict(A = x['A'].sum(), 
                        B = x['B'].sum(), 
                        C = "{%s}" % ', '.join(x['C'])))

df.groupby('A').apply(f)</code>

Cela renverra un DataFrame avec l'union des chaînes dans la colonne C pour chaque groupe, où les chaînes sont contenues entre accolades.

Lambda avec . sum() :

Une autre méthode consiste à appliquer une fonction lambda à l'objet groupby, en utilisant .sum() pour les colonnes numériques et une concaténation personnalisée pour les colonnes de chaînes :

<code class="python">df.groupby('A').apply(lambda x: x.sum())</code>

Cela renverra un DataFrame qui inclut la somme des valeurs numériques et des chaînes concaténées. Pour obtenir l'union des chaînes, vous pouvez utiliser la manipulation de chaînes dans la fonction lambda.

Considérations relatives aux performances :

Il est important de noter que l'application d'une fonction personnalisée à un groupby L'objet est plus lent que l'utilisation de fonctions d'agrégation sur des colonnes numériques. Pour les grands ensembles de données, ce compromis en termes de performances doit être pris en compte.

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