Во-первых, обратите внимание, что вы можете использовать "sum" для объединения списков, потому что +
объединяет списки в Python:
df.keywords.sum()
# out: ['a', 'b', 'c', 'c', 'd', 'a', 'b', 'c', 'd', 'b', 'c', 'g', 'h', 'i']
Затем либо:
import collections
collections.Counter(df.keywords.sum())
# out: Counter({'a': 2, 'b': 3, 'c': 4, 'd': 2, 'g': 1, 'h': 1, 'i': 1})
Или:
np.unique(df.keywords.sum(), return_counts=True)
# out: (array(['a', 'b', 'c', 'd', 'g', 'h', 'i'], dtype='<U1'), array([2, 3, 4, 2, 1, 1, 1]))
Или:
uniq = np.unique(df.keywords.sum(), return_counts=True)
pd.Series(uniq[1], uniq[0])
# out:
a 2
b 3
c 4
d 2
g 1
h 1
i 1
Или:
pd.Series(collections.Counter(df.keywords.sum()))
# out: same as previous
Производительность примерно одинакова, используете ли вы np.unique()
или collections.Counter
, потому что df.keywords.sum()
на самом деле не так быстро.Если вы заботитесь о производительности, чистое выравнивание списка Python гораздо быстрее:
collections.Counter([item for sublist in df.keywords for item in sublist])