Если вы хотите фильтровать по частоте наиболее часто встречающихся слов, подойдет следующая строка (в данном случае 2 наиболее часто встречающихся слова для каждой категории):
from collections import Counter
df.groupby("category")["sentence"].apply(lambda x: Counter(" ".join(x).split()).most_common(2))
category
A [(cat, 2), (runs, 2)]
B [(random, 1), (sentences, 1)]
C [(including, 1), (this, 1)]
Name: sentence, dtype: object
Производительность:
%timeit df.groupby("category")["sentence"].apply(lambda x: Counter(" ".join(x).split()).most_common(2))
2.07 ms ± 87.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit df.groupby('category')['sentence'].apply(lambda x: nltk.FreqDist(nltk.tokenize.word_tokenize(' '.join(x))))
4.96 ms ± 17.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)