как посчитать частоту определенного слова(не строки) независимо от предыдущих строк?

#python #pandas #dataframe

Вопрос:

Предположим, что это набор данных, над которым я работаю:

df1 = pd.DataFrame(['you youe', 'you You YOU', 'eyou Young'], columns=['words'])

print(df1)

введите описание изображения здесь

Я надеюсь подсчитать частоту строк » вы » и » ваш » как слов, независимо от того, что предшествует или следует за этими строками, и независимо от нижнего или верхнего регистра.

Я поместил строки, подобные «youe», чтобы проверить, не ошибается ли мой код.

это то, что я пробовал до сих пор:

df1['counts']=df1['words'].str.count(' you|you. |you, |you | You | YOU|YOU. |YOU, |YOU|YOU | your|your | Your|Your | YOUR|YOUR ')

print(df1)

Ожидаемый результат будет:

         words      count 

  0      you youe    1

  1   you You YOU    3

  2    eyou Young    0
 

Но я получаю:

         words      count 

  0      you youe    1

  1   you You YOU    2

  2    eyou Young    1
 

Ответ №1:

Используйте границы слов bb с опциональным совпадением r , так как возможен тест без учета регистра, добавьте re.I флаг:

 import re

df1['new'] = df1['words'].str.count(r'b(you[r]*)b', flags=re.I)
print (df1)
          words  new
0      you youe    1
1  you Your YOU    3
2    eyou Young    0
 

Комментарии:

1. Это очень хорошо работает для фрейма данных, но я пытался использовать .count(r’b(вы[r]*)b’, флаги=re. I) в одну строку я получаю: «count() не принимает аргументов ключевых слов». действительно снова нуждаюсь в вашем руководстве.

2. @deLaJU — использовать a = 'you youe' и out = pd.Series([a]).str.count(r'b(you[r]*)b', flags=re.I).iat[0]