Maison > développement back-end > Tutoriel Python > Comment puis-je regrouper et compter efficacement les occurrences de termes dans les Pandas DataFrames par ID et groupe sans utiliser de boucles ?

Comment puis-je regrouper et compter efficacement les occurrences de termes dans les Pandas DataFrames par ID et groupe sans utiliser de boucles ?

DDD
Libérer: 2024-11-29 00:01:12
original
522 Les gens l'ont consulté

How can I efficiently group and count occurrences of terms within Pandas DataFrames by ID and group without using loops?

Regroupement et comptage de valeurs dans les DataFrames Pandas

Dans l'analyse des données, il est souvent nécessaire de regrouper les données et de compter les occurrences de valeurs ou de termes spécifiques. Ce type d'agrégation peut être facilement réalisé à l'aide des fonctions groupby et size dans Pandas.

Problème :

Supposons que vous ayez un DataFrame df avec les colonnes suivantes : id, groupe et terme. Le but est de compter le nombre d'occurrences de chaque terme unique pour chaque combinaison d'identifiant et de groupe, sans utiliser de boucles.

Solution :

Pour y parvenir, nous pouvez utiliser les étapes suivantes :

  1. Groupby : Regroupez le DataFrame par les trois colonnes en utilisant groupby(['id', 'group', 'term']). Cela divise les données en groupes en fonction des combinaisons uniques de ces colonnes.
  2. Taille : Appliquez la fonction de taille aux données groupées. size calcule le nombre de lignes dans chaque groupe, ce qui compte effectivement le nombre d'occurrences de chaque terme unique dans chaque paire id-group.
  3. Dépiler : Le résultat de l'opération groupby est un index hiérarchique. Pour créer un tableau avec des lignes représentant des paires id-group et des colonnes représentant des termes uniques, nous pouvons utiliser unstack(fill_value=0). Cela dépile l'index hiérarchique et remplit toutes les valeurs manquantes avec 0.

Le DataFrame résultant ressemblera à cette disposition :

entrez la description de l'image ici

Exemple de code :

df = pd.DataFrame([
    (1, 1, 'term1'),
    (1, 2, 'term2'),
    (1, 1, 'term1'),
    (1, 1, 'term2'),
    (2, 2, 'term3'),
    (2, 3, 'term1'),
    (2, 2, 'term1')
], columns=['id', 'group', 'term'])

result = df.groupby(['id', 'group', 'term']).size().unstack(fill_value=0)

print(result)
Copier après la connexion

Sortie :

   term1  term2  term3
id group             
1   1      2      1
2   2      2      1
   3      1      0
Copier après la connexion

Performance :

Pour les grands ensembles de données, le Les opérations de groupby et de taille peuvent être coûteuses en calcul. Le code suivant fournit des statistiques de synchronisation pour le regroupement et le comptage sur un DataFrame de 1 000 000 de lignes :

df = pd.DataFrame(dict(id=np.random.choice(100, 1000000),
                       group=np.random.choice(20, 1000000),
                       term=np.random.choice(10, 1000000)))

%timeit df.groupby(['id', 'group', 'term']).size().unstack(fill_value=0)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal