首页 > 解决方案 > 以字符串形式计数并存储映射到其他值

问题描述

我有一个熊猫数据框,其中包括这样的列(以及其他列),其中 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

然后我试图添加到....它看起来真的很笨重

标签: pandasstringdataframe

解决方案


我设法解决了它,学习的关键点是使用 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 函数中?


推荐阅读