IIUC następnie można wykonać następujące czynności:
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
Tutaj użyj wektorowanego str.split
, aby podzielić na spacje, a następnie apply
len
, aby uzyskać liczbę ementów, możemy następnie wywołać value_counts
w celu zagregowania liczby częstotliwości.
Następnie zmień nazwę indeksu i sortować je, aby uzyskać pożądany wynik
UPDATE
Można to również zrobić za pomocą str.len
zamiast apply
które powinny przeskalować lepiej:
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
Czas
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
Dla 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
Szybkie pytanie.Jeśli słowo kluczowe zawiera więcej niż 10 słów, wyjście jest tak jak: 1 słowa: 6324 10 słowa: 5 11 słów: 3 12 słów: 1 13 słów: 1 15 słów: 1 16 słów: 2 19 słowa: 1 2 słów: 9109 3 słów: 5323 4 słów: 2010 5 słów: 862 6 słów: 307 7 słów: 141 8 słowa: 51 9 słowa: 19 Sposób sortowania liczby słów od 1 do 19? – Sergei
zamień kolejność tak, aby najpierw "sort_index", a następnie rzutuj na str: 'count.sort_index (inplace = True)', a następnie 'count.index = count.index.astype (str) + 'words:'' – EdChum
Dzięki! Działa świetnie! – Sergei