Подсчет частоты хэштегов в кадре данных - PullRequest
4 голосов
/ 03 августа 2020

Я пытаюсь подсчитать частоту слов хэштега в столбце «текст» моего фрейма данных.

index        text
1            ello ello ello ello #hello #ello
2            red green blue black #colours
3            Season greetings #hello #goodbye 
4            morning #goodMorning #hello
5            my favourite animal #dog

word_freq = df.text.str.split(expand=True).stack().value_counts()

Приведенный выше код выполнит подсчет частоты для всех строк в текстовом столбце , но я просто для того, чтобы вернуть частоты хэштегов.

Например, после запуска кода в моем фрейме данных выше он должен вернуть

#hello        3
#goodbye      1
#goodMorning  1
#ello         1
#colours      1
#dog          1

Есть ли способ немного изменить мой word_freq код, поэтому он считает только слова хэштега и возвращает их так, как я указал выше? Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 03 августа 2020

Немного подробное решение, но оно помогает.

dictionary_count=data_100.TicketDescription.str.split(expand=True).stack().value_counts().to_dict()

dictionary_count={'accessgtgtjust': 1,
'sent': 1,
'investigate': 1,
'edit': 1,
'#prd': 1,
'getting': 1}

ert=[i for i in list(dictionary_count.keys()) if '#' in i]

ert
Out[238]: ['#prd']

unwanted = set(dictionary_count.keys()) - set(ert)

for unwanted_key in unwanted: 
   del dictionary_count[unwanted_key]

dictionary_count
Out[241]: {'#prd': 1}
2 голосов
/ 03 августа 2020

Используйте Series.str.findall в столбце text, чтобы найти все слова хэштега, затем используйте Series.explode + Series.value_counts:

counts = df['text'].str.findall(r'(#\w+)').explode().value_counts()

Другая идея с использованием Series.str.split + DataFrame.stack:

s = df['text'].str.split(expand=True).stack()
counts = s[lambda x: x.str.startswith('#')].value_counts()

Результат:

print(counts)
#hello          3
#dog            1
#colours        1
#ello           1
#goodMorning    1
#goodbye        1
Name: text, dtype: int64
1 голос
/ 03 августа 2020

в одну сторону с использованием str.extractall, что приведет к удалению # из результата. Затем value_counts также

s = df['text'].str.extractall('(?<=#)(\w*)')[0].value_counts()
print(s)
hello          3
colours        1
goodbye        1
ello           1
goodMorning    1
dog            1
Name: 0, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...