【问题标题】:How to calculate most frequently occurring words in pandas dataframe column by year?如何按年计算熊猫数据框列中出现频率最高的单词?
【发布时间】:2019-11-27 15:56:30
【问题描述】:

我有一个 pandas 数据框,其中包含“评论”列和“年份”列。我想查看评论列中出现频率最高的 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 个单词。

【问题讨论】:

    标签: python pandas word-frequency


    【解决方案1】:

    你可以使用:

    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 将值转换为小写,Series.str.splitDataFrame
    2. DataFrame.stack 重塑MultiIndex Series
    3. 使用SeriesGroupBy.value_counts 计算每组的值,对值进行排序
    4. 通过GroupBy.head 获取顶部N
    5. 数据清理 - DataFrame.rename_axisDataFrame.reset_index

    【讨论】:

      【解决方案2】:

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

      除了重置索引,你也可以参考answers in this question获取更多想法。

      【讨论】:

        猜你喜欢
        • 2018-03-28
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 2023-03-16
        • 2020-12-29
        • 1970-01-01
        • 1970-01-01
        • 2021-05-10
        相关资源
        最近更新 更多