如何按年份计算 pandas 数据框中最常出现的单词?

How to calculate most frequently occurring words in pandas dataframe column by year?

我有一个 pandas 数据框,其中包含一列 'reviews' 和一列 'year'。我想查看评论列中最常出现的前 100 个单词,但按年份过滤。所以,我想知道从2002年、2003年、2004年等等一直到2017年的前100名。

import pandas as pd
from nltk.corpus import stopwords

df=pd.read_csv('./reviews.csv')

stop = stopwords.words('english')

commonwords = pd.Series(' '.join(df['reviews']).lower().split()).value_counts()[:100]

print(commonwords)

df.to_csv('commonwords.csv', index=False)

上面的代码有效,但它只给出了所有年份中最常出现的前 100 个单词。

在创建 commonwords data-frame 之前,您可以像这样 df.groupby(['year', 'reviews']) 使用 groupby 操作创建另一个数据框。然后使用reset_index这个操作,这样就可以用来过滤前100了。

除了重置索引,您还可以参考answers in this question进一步的想法。

您可以使用:

df = pd.DataFrame({'reviews':['He writer in me great great me',
                        'great ambience the coffee was great',
                        'great coffee'],
                   'year':[2002,2004,2004]})
print (df)

                               reviews  year
0       He writer in me great great me  2002
1  great ambience the coffee was great  2004
2                         great coffee  2004

#change for 100 for top100 in real data
N = 3
df1 =  (df.set_index('year')['reviews']
          .str.lower()
          .str.split(expand=True)
          .stack()
          .groupby(level=0)
          .value_counts()
          .groupby(level=0)
          .head(N)
          .rename_axis(('year','words'))
          .reset_index(name='count'))

print (df1)
   year     words  count
0  2002     great      2
1  2002        me      2
2  2002        he      1
3  2004     great      3
4  2004    coffee      2
5  2004  ambience      1

解释:

  1. Series.str.lower with Series.str.split 的值转换为小写 DataFrame
  2. DataFrame.stack 重塑 MultiIndex Series
  3. SeriesGroupBy.value_counts 计算每组的值,值已排序
  4. 通过 GroupBy.head
  5. 获得最高 N
  6. 数据清理 - DataFrame.rename_axis with DataFrame.reset_index