Wie gruppiere ich identische Werte und zähle ihre Häufigkeit in Python?


10

Neuling in der Analytik mit Python, seien Sie also bitte vorsichtig :-) Ich konnte keine Antwort auf diese Frage finden - entschuldige mich, wenn sie bereits an anderer Stelle in einem anderen Format beantwortet wurde.

Ich habe einen Datensatz mit Transaktionsdaten für ein Einzelhandelsgeschäft. Variablen zusammen mit Erklärung sind:

  • Abschnitt: der Abschnitt des Geschäfts, eine str;
  • Produktname: Name des Produkts, a str;
  • Quittung: die Nummer der Rechnung, ein int;
  • Kassierer, die Nummer des Kassierers, ein int;
  • Kosten: die Kosten des Artikels, ein Schwimmer;
  • Datum, im Format MM / TT / JJ, a str;
  • Zeit im Format HH: MM: SS, a str;

Der Beleg hat für alle in einer einzelnen Transaktion gekauften Produkte den gleichen Wert. Daher kann er verwendet werden, um die durchschnittliche Anzahl der in einer einzelnen Transaktion getätigten Käufe zu bestimmen.

Was ist der beste Weg, um dies zu erreichen? Ich möchte im Wesentlichen verwenden groupby(), um die Belegvariable nach ihren eigenen identischen Vorkommen zu gruppieren, damit ich ein Histogramm erstellen kann.

Arbeiten mit den Daten in einem Pandas DataFrame.

BEARBEITEN:

Hier sind einige Beispieldaten mit Header (prod_name ist eigentlich eine Hex-Zahl):

 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 

Von diesem Beispielsatz würde ich ein Histogramm des Belegs erwarten, das zwei Vorkommen des Belegs 102857 (da diese Person zwei Artikel in einer Transaktion gekauft hat) bzw. einen Vorkommen des Belegs 102856 und des Belegs 102858 zeigt. Hinweis: Mein Datensatz ist ungefähr nicht riesig 1 Million Zeilen.


Fertig, einige Beispieldaten hinzugefügt.
new_analyst

Antworten:


15

Von diesem Beispielsatz würde ich ein Histogramm des Empfangs erwarten, das zwei Vorkommen des Belegs 102857 (da diese Person zwei Artikel in einer Transaktion gekauft hat) bzw. einen Vorkommen des Belegs 102856 und des Belegs 102858 zeigt.

Dann wollen Sie:

df.groupby ('Quittung'). Quittung.Zahl ()

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

Wie filtern wir dies, da das Ergebnis kein Datenrahmen mehr ist, um nur die Werte anzuzeigen, deren Anzahl mehr als 1 beträgt?
Nikhil VJ

1
Sie können immer noch Dinge tun wie s[s>1], wos=df.groupby('receipt').receipt.count()
Emre

2

Ich stelle einige Tutorials zum Thema Daten-Wrangling zusammen. Vielleicht hilft mein Jupyter-Notizbuch auf Github. Ich denke, dass es der Schlüssel ist, die Linie zu modifizieren:

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

sein:

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

Um nach mehreren Variablen zu gruppieren, sollte dies funktionieren:

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

Dank dafür. Manchmal wird der Empfang jedoch wiederholt (auch wenn das Datum anders ist). Daher aggregieren wir alle unterschiedlichen Empfangsvorkommen auch zu unterschiedlichen Terminen, wenn wir die Anzahl der Eingänge pro Transaktion wirklich wissen möchten - es gibt jedoch keine eindeutige Transaktions-ID-Variable. Ich glaube nicht, dass sich die Quittung am selben Tag wiederholt. Können wir das Datum als Gruppierungsmethode verwenden? df.groupby('reciept')['date'].count()gibt das gleiche Ergebnis wiedf.groupby('reciept')['prod_name'].count()
new_analyst

Fügen Sie dem groupby-Aufruf ein Datum als Parameter hinzu. Ich habe meine Antwort oben bearbeitet, um sie nach mehreren Variablen zu gruppieren.
Ryan

0

Soweit ich verstehen kann, benötigen Sie ein Histogramm Ihrer Quittungsnummer. Sie können so etwas versuchen

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()

Auf diese Weise erhalten Sie Balkendiagramme mit den meisten sich wiederholenden Abrechnungsnummern (20 mit den meisten Wiederholungen). Ändern Sie die Zahl in der Kopffunktion, um mehr oder weniger zu erhalten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.