Come raggruppare valori identici e contare la loro frequenza in Python?


10

Principiante dell'analisi con Python, quindi per favore sii gentile :-) Non sono riuscito a trovare la risposta a questa domanda - mi scuso se ha già risposto altrove in un formato diverso.

Ho un set di dati di dati di transazione per un punto vendita. Le variabili insieme alla spiegazione sono:

  • sezione: la sezione del negozio, una str;
  • prod_name: nome del prodotto, uno str;
  • ricevuta: il numero della fattura, un int;
  • cassiere, il numero della cassiera, un int;
  • costo: il costo dell'articolo, un galleggiante;
  • data, nel formato MM / GG / AA, una str;
  • ora, nel formato HH: MM: SS, a str;

La ricevuta ha lo stesso valore per tutti i prodotti acquistati in una singola transazione, quindi può essere utilizzata per determinare il numero medio di acquisti effettuati in una singola transazione.

Qual è il modo migliore per farlo? In sostanza, desidero utilizzare groupby()per raggruppare la variabile ricevuta per le sue occorrenze identiche in modo da poter creare un istogramma.

Lavorare con i dati in un DataFrame Panda.

MODIFICARE:

Ecco alcuni dati di esempio con intestazione (nome_prodotto è in realtà un numero esadecimale):

 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 

Da questo set di esempio mi aspetterei un istogramma della ricevuta che mostra due occorrenze della ricevuta 102857 (poiché quella persona ha acquistato due articoli in una transazione) e una ricorrenza rispettivamente della ricevuta 102856 e della ricevuta 102858. Nota: il mio set di dati non è enorme, circa 1 milione di file.


Fatto, aggiunti alcuni dati di esempio.
new_analyst

Risposte:


15

Da questo set di campioni mi aspetterei un istogramma della ricevuta che mostra due occorrenze della ricevuta 102857 (poiché quella persona ha acquistato due articoli in una transazione) e una ricorrenza rispettivamente della ricevuta 102856 e della ricevuta 102858.

Quindi vuoi:

df.groupby ( 'ricezione'). receipt.count ()

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

poiché il risultato non è più un frame di dati, come possiamo filtrarlo per mostrare solo i valori che hanno un conteggio superiore a 1?
Nikhil VJ,

1
Puoi ancora fare cose come s[s>1], doves=df.groupby('receipt').receipt.count()
Emre,

2

Sto mettendo insieme alcuni tutorial sul wrangling dei dati. Forse il mio quaderno jupyter su github mi aiuterà. Penso che sia la chiave sta modificando la linea:

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

essere:

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

Per raggruppare per più variabili questo dovrebbe funzionare:

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

Grazie per quello Tuttavia, a volte la ricevuta viene ripetuta (anche quando la data è diversa). Pertanto, stiamo aggregando tutte le diverse occorrenze di ricezione anche in date diverse, quando vogliamo davvero conoscere il numero di ricevute per transazione, tuttavia non esiste una variabile ID transazione univoca. Non credo che le ricevute delle ricevute si ripetano nello stesso giorno: possiamo usare la data come un modo per raggruppare? df.groupby('reciept')['date'].count()dà lo stesso risultato didf.groupby('reciept')['prod_name'].count()
new_analyst il

Aggiungi la data come parametro all'interno della chiamata groupby. Modificata la mia risposta sopra per raggruppare per più variabili.
Ryan,

0

Da quello che posso capire è che avresti bisogno di un istogramma della ricevuta n. Puoi provare qualcosa del genere

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

Questo ti darà grafici a barre della maggior parte dei numeri di fatturazione ricorrenti (20 la maggior parte ripetuti) Modifica il numero nella funzione principale per ottenere più o meno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.