以字符串为单位进行计数,并存储映射到其他数值中。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以字符串为单位进行计数,并存储映射到其他数值中。相关的知识,希望对你有一定的参考价值。
我有一个pandas数据框架,其中包括这样的列(其中包括),RATING是整数0到5,COMMENT是字符串。
RATING COMMENT
1 some text
2 more text
3 other text
... ...
我现在想 开采 (缺乏更好的词)的关键词的字符串列表。
list = ['like', trust', 'etc etc etc']
我想通过comment进行迭代,并通过评级计算关键词的数量,得到一个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'])
有一件事我还在苦恼,那就是如何使用regex来使它寻找完整的单词。我相信\b是正确的,但我如何把它放到str.count函数中?
以上是关于以字符串为单位进行计数,并存储映射到其他数值中。的主要内容,如果未能解决你的问题,请参考以下文章