Comment regrouper des valeurs identiques et compter leur fréquence en Python?


10

Débutant en analytique avec Python, alors soyez gentil :-) Je n'ai pas trouvé la réponse à cette question - excuses si elle a déjà été répondue ailleurs dans un format différent.

J'ai un ensemble de données de données de transaction pour un point de vente. Les variables ainsi que l'explication sont:

  • section: la section du magasin, une str;
  • prod_name: nom du produit, une chaîne;
  • reçu: le numéro de la facture, un int;
  • caissier, le numéro du caissier, un int;
  • coût: le coût de l'article, un flotteur;
  • date, au format MM / JJ / AA, une chaîne;
  • heure, au format HH: MM: SS, une chaîne;

Le reçu a la même valeur pour tous les produits achetés en une seule transaction, il peut donc être utilisé pour déterminer le nombre moyen d'achats effectués en une seule transaction.

Quelle est la meilleure manière de s'occuper de ça? Je veux essentiellement utiliser groupby()pour regrouper la variable de réception par ses propres occurrences identiques afin de pouvoir créer un histogramme.

Utilisation des données dans un DataFrame pandas.

ÉDITER:

Voici quelques exemples de données avec en-tête (prod_name est en fait un nombre hexadécimal):

 section,prod_name,receipt,cashier,cost,date,time 
 electronics,b46f23e7,102856,5,70.50,05/20/15,9:08:20 
 womenswear,74558d0d,102857,8,20.00,05/20/15,9:12:46 
 womenswear,031f36b7,102857,8,30.00,05/20/15,9:12:47 
 menswear,1d52cd9d,102858,3,65.00,05/20/15,9:08:20 

À partir de cet échantillon, je m'attendrais à un histogramme de réception qui montre deux occurrences de la réception 102857 (puisque cette personne a acheté deux articles en une transaction) et une occurrence respectivement de la réception 102856 et de la réception 102858. Remarque: mon ensemble de données n'est pas énorme, environ 1 million de lignes.


Terminé, ajouté quelques exemples de données.
new_analyst

Réponses:


15

À partir de cet échantillon, je m'attendrais à un histogramme de réception qui montre deux occurrences de la réception 102857 (puisque cette personne a acheté deux articles en une seule transaction) et une occurrence respectivement de la réception 102856 et de la réception 102858.

Alors tu veux:

df.groupby ('ticket'). ticket.count ()

receipt
102856    1
102857    2
102858    1
Name: receipt, dtype: int64

comme le résultat n'est plus une trame de données, comment filtrer cela pour n'afficher que les valeurs dont le nombre est supérieur à 1?
Nikhil VJ

1
Vous pouvez toujours faire des choses comme s[s>1], oùs=df.groupby('receipt').receipt.count()
Emre

2

Je prépare des didacticiels sur la lutte contre les données. Peut-être que mon cahier jupyter sur github vous aidera. Je pense que c'est la clé qui modifie la ligne:

df.groupby('male')['age'].mean()

être:

df.groupby('reciept')['prod_name'].count()

Pour regrouper par plusieurs variables, cela devrait fonctionner:

df.groupby(['reciept','date'])['reciept'].count()

Merci pour ça. Cependant, la réception est parfois répétée (lorsque la date est également différente). Par conséquent, nous regroupons toutes les différentes occurrences de réception, même à des dates différentes, lorsque nous voulons vraiment connaître le nombre de réceptions par transaction - mais il n'y a pas de variable d'ID de transaction unique. Je ne pense pas que le reçu se répète le même jour - pouvons-nous utiliser la date comme moyen de regrouper? df.groupby('reciept')['date'].count()donne le même résultat quedf.groupby('reciept')['prod_name'].count()
new_analyst

Ajoutez la date comme paramètre dans l'appel groupby. Modifié ma réponse ci-dessus pour regrouper par plusieurs variables.
Ryan

0

D'après ce que je peux comprendre, vous auriez besoin d'un histogramme de votre reçu non. Vous pouvez essayer quelque chose comme ça

import pandas as pd data = np.read_csv("your_file_path.csv") data.groupby(["receipt"])receipt.count().sort_values(ascending=False).head(20).plot.bar()

Cela vous donnera des graphiques à barres de la plupart des numéros de facturation répétitifs (20 plus répétitifs). Modifiez le nombre dans la fonction de tête pour obtenir plus ou moins.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.