Sento che questa è una domanda rudimentale, ma sono molto nuovo e non sono stato in grado di risolverlo / trovare la risposta.
In definitiva, ciò che sto cercando di fare qui è contare valori univoci su una determinata colonna e quindi determinare quale di quei valori univoci ha più di un valore univoco in una colonna corrispondente.
Quindi, per questi dati, quello che sto cercando di determinare è "chi" ha "più di una ricevuta" per tutti gli acquisti, quindi determinare le stesse informazioni in base a ciascuna categoria di prodotto.
Il mio approccio finora:
Abbiamo un set di dati come questo:
receipt,name,etc,category
1,george,xxx,fish
1,george,xxx,cat
2,george,xxx,fish
3,bill,xxx,fish
3,bill,xxx,dog
4,jill,xxx,cat
5,bill,xxx,cat
5,bill,xxx,cat
5,bill,xxx,dog
6,george,xxx,fish
Quindi posso farlo:
df.set_index(['name','receipt'])
E diventa più interessante
etc category
name receipt
george 1 xxx fish
1 xxx cat
2 xxx fish
bill 3 xxx fish
3 xxx dog
jill 4 xxx cat
bill 5 xxx cat
5 xxx cat
5 xxx dog
george 6 xxx fish
A questo punto mi sembra che i dati siano facili da lavorare, ma non l'ho capito.
Una cosa che è interessante per me è che se ordino i dati per nome prima di indicizzarli, i dati vengono visualizzati raggruppati per nome. In entrambi i casi l'indice è lo stesso, quindi non so come giocare con la rappresentazione dei dati dopo l'indicizzazione.
È facile trovare i dati per categoria usando
>>> orders.loc[orders['category'] == 'fish']
etc category
name receipt
george 1 xxx fish
2 xxx fish
bill 3 xxx fish
george 6 xxx fish
Ma quello che non riesco a capire è come dire ai panda "Trovami l'elenco di nomi che hanno più di una ricevuta".
Domande più piccole:
- Qual è il "modo panda" per ottenere la lunghezza della parte dei nomi dell'indice? Suppongo che potrei semplicemente trasformare la
name
colonna in un set e ottenerne la lunghezza. Ma sono curioso di conoscere gli indici.
Modifica / Aggiorna
Grazie per quelle risposte! Ecco un chiarimento su ciò che sto cercando:
Sto cercando di trovare "clienti abituali": persone con più di una ricevuta.
Quindi il mio set di tutti i clienti sarebbe:
names: ['george','bill','jill'], ratio: 1.0
I miei clienti abituali:
names: ['george','bill'], ratio 0.66
Tutti i clienti "pesce":
names: ['george','bill'], ratio: 0.666
I miei clienti 'pesce' ripetuti:
names: ['george'], ratio: 0.333
Penso che gli esempi forniti siano utili, ma sentiti libero di aggiungere qualsiasi cosa.