pandas - 以字符串形式计数并存储映射到其他值
问题描述
我有一个熊猫数据框,其中包括这样的列(以及其他列),其中 RATING 是整数 0 到 5,COMMENT 是字符串:
RATING COMMENT
1 some text
2 more text
3 other text
... ...
我现在想挖掘(因为没有更好的词)字符串列表的关键词:
list = ['like', trust', 'etc etc etc']
并想遍历评论并通过评级计算关键词的数量以获得像这样的df
KEYWORD RATING COUNT
like 1 202
like 2 325
like 3 0
like 4 967
like 5 534
...
trust 1 126
....
我怎样才能做到这一点?
我是初学者,非常感谢您的帮助(越简单,越容易理解越好)
谢谢你
嗨,目前我一直在手动迭代,即
#DATA_df is the original data
word_list = ['word', 'words', 'words', 'more']
values = [0] * len(word_list)
tot_val=[values]*5
rating_table = pd.DataFrame(tot_val, columns=word_list)
for i in len(word_list):
for g in len (DATA_df[COMMENT]):
if i in DATA_df[COMMENT][g]:
rating_table[i][DATA_df[RATING]-1] +=1
这给了一个像这样的DF
word words words more
0 0 0 0 0
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0
然后我试图添加到....它看起来真的很笨重
解决方案
我设法解决了它,学习的关键点是使用 group by 根据评级预选数据,这对数据进行切片,并且可以在组中交替。还结合使用 str.lower() 和 str.count() 效果很好。
如果更有经验的程序员可以向我展示一个更好的解决方案,我会很感激,但至少这是可行的。
rating = [1,2,3,4,5]
rategroup = tp_clean.groupby('Rating')
#print (rategroup.groups)
results_list =[]
for w in word_list:
current = [w]
for r in rating:
stargroup = rategroup.get_group(str(r))
found = stargroup['Content'].str.lower().str.count(w)
c = found.sum()
current.append(c)
results_list.append(current)
results_df = pd.DataFrame (results_list, columns=['Keyword','1 Star','2 Star','3 Star','4 Star','5 Star'])
我仍在苦苦挣扎的一件事是如何使用正则表达式使其查找完整的单词。我相信 \b 是正确的,但我如何将它放入 str.count 函数中?
推荐阅读
- excel - 基于特定数字之间的列标题的平均值
- http - 跨 EJB(有状态会话 Bean)与 HTTP 会话与现代框架的会话信息
- android - Wear OS 通知振动和声音
- node.js - 如何在 Node.js 中使用 Telegram 的 TDlib
- haskell - 根据 (maxBound :: Int) 的运行时值进行类型约束
- informatica - 在 Informatica 中工作时出现 FR_3085 错误
- c++ - 在 C++ 中自动生成方法
- xamarin - 如何使用计时器禁用 UIButton
- mysql - 尝试根据日期查找表的最大行时返回奇怪的值
- javascript - 确认框 OK/Cancel 功能