Как получить количество раз, если слово находится внутри определенного столбца в пандах? - PullRequest
0 голосов
/ 29 апреля 2018

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

У меня есть CSV-файл со многими столбцами. Заголовок одного из столбцов - «имена».

В этом столбце «имена» мне нужны только те времена, когда имя «Джон» повторяется.

Например, мой столбец "имена" выглядит следующим образом:

names
John
John M
Mike John
Audrey
Andrew

Для этого случая мне понадобится скрипт на python, использующий pandas, чтобы получить значение 3, потому что слово «Джон» повторяется три раза.

Вот коды, которые я использую:

from_csv = pd.read_csv(r'csv.csv', usecols = ['names'] , index_col=0, header=0 )

times = from_csv.query('names == "John"').names.count()

Но он возвращает мне только 1, потому что есть только одна строка, в которой есть только Джон.

Я пытался использовать:

times = from_csv.query('names == "*John*"').names.count()

но безуспешно.

Как я могу получить 3 для этой конкретной ситуации? спасибо

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Вы можете использовать pandas.Series.str.count, чтобы подсчитать, сколько раз в каждой строке встречается шаблон.

df.names.str.count('John').sum()

3

В этом примере это соответствует выходу OP. Однако это привело бы к другим результатам, если бы John появлялось более одного раза в одном ряду. Предположим, у нас было это df вместо:

df

                 names
0            John John
1        John M John M
2  Mike John Mike John
3        Audrey Audrey
4        Andrew Andrew

Тогда мой ответ выдает

df.names.str.count('John').sum()

6

Пока ответ Вена дает

df.names.str.contains('John').sum()

3
0 голосов
/ 29 апреля 2018

Использование str.contains

df.Name.str.contains('John').sum()
Out[246]: 3

Или мы используем list и map с in

sum(list(map(lambda x : 'John' in x,df.Name)))
Out[248]: 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...