python - 返回列中单词的频率及其关联的行
问题描述
我有一个数据集,其中包含一个包含句子的文本列和一个 ID 列。我能够计算每个单词在文本列中重复多少次的频率data.text.str.split(expand=True).stack().value_counts()
。但我的目标是提取词频以及与该词关联的 id 列。
输入 :
文本 | ID |
---|---|
他最好的工作感动 | 1 |
失业的坏季节 | 1 |
最佳方式保证金 | 2 |
沮丧的失业者 | 3 |
所需的输出:
单词 | 频率 | ID |
---|---|---|
最好的 | 2 | 1 |
最好的 | 2 | 2 |
沮丧的 | 1 | 1 |
失业者 | 2 | 1 |
失业者 | 2 | 3 |
坏的 | 1 | 1 |
解决方案
您确定要复制输出中的总频率吗?无论哪种方式,其中一个表wordids
,freqs_df
或output
应该能够帮助您:
g = df['text'].str.split(expand=True)
g['id'] = df['id']
wordids = g.melt(id_vars=['id']).dropna()[['id', 'value']]
freqs = wordids['value'].value_counts()
freqs_df = pd.DataFrame({'value': freqs.index, 'freq': freqs.values})
output = pd.merge(wordids, freqs_df, on='value')
print(output)
输入:
df = pd.DataFrame({
'id': [1, 1, 2, 3],
'text': ['He best work move happy', 'unemployed bad season',
'best way margin', 'frustated unemployed']
})
输出:
id value freq
0 1 He 1
1 1 unemployed 2
2 3 unemployed 2
3 2 best 2
4 1 best 2
5 3 frustated 1
6 1 bad 1
7 2 way 1
8 1 work 1
9 1 season 1
10 2 margin 1
11 1 move 1
12 1 happy 1
推荐阅读
- tarantool - 如果我有两个,如何转移特定的辅助密钥?
- macos - 如何在 macOS 上停止\关闭\杀死 tcp 连接
- python - Pandas 结合了两种不同长度的时间序列数据框
- nopcommerce - 我想允许正斜杠进入 SENAME
- ios - firebase 检索用户 ID 以在 url API 调用中传递它
- r - Bookdown 演示文稿中类似 Beamer 的叠加层
- ubuntu-20.04 - 在内核 5.4.0-48-generic 上启动 ubuntu 20.04 时出现问题
- c - char *str 声明后不定义,它分配多少内存?
- flutter - FAILURE:构建失败并出现异常。颤振.gradle'行:904
- c++ - 如何在二维向量中打印所有 8 个邻居(分段错误)