IIUC allora si può fare quanto segue:
In [89]:
count = df['fruits'].str.split().apply(len).value_counts()
count.index = count.index.astype(str) + ' words:'
count.sort_index(inplace=True)
count
Out[89]:
1 words: 2
2 words: 2
3 words: 1
4 words: 1
Name: fruits, dtype: int64
Qui utilizzare lo str.split
vettorizzato per dividere gli spazi, quindi apply
len
per ottenere il conteggio del numero di el ements, possiamo quindi chiamare value_counts
per aggregare il conteggio delle frequenze.
Abbiamo quindi rinominare l'indice e ordinare per ottenere il risultato desiderato
UPDATE
Questo può anche essere fatto utilizzando str.len
anziché apply
che dovrebbe scalare meglio:
In [41]:
count = df['fruits'].str.split().str.len()
count.index = count.index.astype(str) + ' words:'
count.sort_index(inplace=True)
count
Out[41]:
0 words: 2
1 words: 1
2 words: 3
3 words: 4
4 words: 2
5 words: 1
Name: fruits, dtype: int64
Orari
In [42]:
%timeit df['fruits'].str.split().apply(len).value_counts()
%timeit df['fruits'].str.split().str.len()
1000 loops, best of 3: 799 µs per loop
1000 loops, best of 3: 347 µs per loop
Per un 6K df:
In [51]:
%timeit df['fruits'].str.split().apply(len).value_counts()
%timeit df['fruits'].str.split().str.len()
100 loops, best of 3: 6.3 ms per loop
100 loops, best of 3: 6 ms per loop
Domanda veloce.Se parola ha più di 10 parole, l'uscita è così: 1 parole: 6324 10 parole: 5 11 parole: 3 12 parole: 1 13 parole: 1 15 parole: 1 16 parole: 2 19 parole: 1 2 parole: 9109 3 parole: 5323 4 parole: 2010 5 parole: 862 6 parole: 307 7 parole: 141 8 parole: 51 9 parole: 19 Come Selezionare per numero di parole da 1 a 19? – Sergei
scambia l'ordine in modo da prima 'sort_index' e poi lancia in str:' count.sort_index (inplace = True) 'e poi' count.index = count.index.astype (str) + 'words:' ' – EdChum
Grazie! Funziona alla grande! – Sergei