Подсчет в строковых условиях и сохраненный сопоставленный с другим значением - PullRequest
0 голосов
/ 27 мая 2020

У меня есть pandas фрейм данных, который включает такие столбцы (среди прочего), где RATING - это целые числа от 0 до 5, а COMMENT - строка:

RATING   COMMENT
1        some text
2        more text
3        other text
...      ...

Теперь я хотел бы (из-за отсутствия лучшего слова) ключевые слова для списка строк:

list = ['like', trust', 'etc etc etc']

и хотел бы пройти через КОММЕНТАРИЙ и подсчитать количество ключевых слов по рейтингу, чтобы получить df out вот так

KEYWORD     RATING     COUNT
like        1          202
like        2          325
like        3          0
like        4          967
like        5          534
...
trust       1          126
....

как я могу этого добиться?

Я новичок, поэтому был бы очень признателен за вашу помощь (и чем проще и понятнее, тем лучше)

спасибо

привет, на данный момент я выполняю итерацию вручную, ie

#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

, который я затем пытаюсь добавить к .... кажется действительно неуклюжим

1 Ответ

0 голосов
/ 28 мая 2020

Мне удалось решить эту проблему, ключевые моменты научились использовать 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...