python - 如何使用 Pandas 按类别分组然后计算单词的频率

标签 python pandas nltk

我的df看起来像这样:

category       text
--------       ----
soccer         soccer game is good
soccer         soccer game
basketball     game basketball
basketball     game
volleyball     sport volleyball sport   

我想要做的是groupby category,然后按频率列出单词

category       text          frequency
--------       ----          ---------
soccer         soccer        2
               game          2 
               is            1
               good          1
basketball     game          2
               basketball    1  
volleyball     sport         2
               volleyball    1

我做了什么?

  • 我将所有文本组合在一起

df.groupby(['类别])['文本'].sum()

现在,自从我将其分组以来,所有文本都位于相同的上,但我不知道如何使用每个字数来制作频率表。

有人可以帮我吗?

最佳答案

#方法1:

您可以将series.str.splitexplodegroupby.value_counts结合使用

(df.assign(text=df['text'].str.split()).explode("text")
 .groupby("category",sort=False)['text'].value_counts())

category    text      
soccer      game          2
            soccer        2
            good          1
            is            1
basketball  game          2
            basketball    1
volleyball  sport         2
            volleyball    1
Name: text, dtype: int64

#方法2:

对于旧版本的 pandas,使用 np.concatenateindex.repeat 以及 df.join (还列出了其他方法 here )

s = df['text'].str.split()
(df[['category']].join(pd.Series(np.concatenate(s),
                      index=df.index.repeat(s.str.len()),name='text'))
.groupby("category",sort=False)['text'].value_counts())

#方法 3:使用 sklearn 中的 MultiLabelBinarizer

from sklearn.preprocessing import MultiLabelBinarizer

s = df['text'].str.split()
mlb = MultiLabelBinarizer()
mlb.fit(s)
out = pd.DataFrame(mlb.transform(s),columns=mlb.classes_).groupby(df['category']).sum()
out.replace(0,np.nan).stack().astype(int)

category              
basketball  basketball    1
            game          2
soccer      game          2
            good          1
            is            1
            soccer        2
volleyball  sport         1
            volleyball    1
dtype: int32

关于python - 如何使用 Pandas 按类别分组然后计算单词的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65601043/

相关文章:

python - 如何更改Python中导入数据的列值

python - 从 pandas DataFrame 的列中查找、提取并重新附加年份

python - 使用 Python NLTK 对大型 (>70MB) TXT 文件进行标记。串联并写入数据以流式传输错误

Python 将正态曲线拟合到数据 : matplotlib/scipy and graph

python - 如何根据 UTC 的偏移(毫秒?

python - 基于不同列中的值的重复行

python - 使用 Python/NLTK 提取一组单词,然后将其与标准英语词典进行比较

python - NLP 中的否定处理

python - 如何将文本文件中的一行与其中存在的字符串匹配?

python - Scrapy 中的内存泄漏