Можете ли вы сделать value_counts для определенного интервала символов с помощью pandas?

#python #pandas

#python #pandas

Вопрос:

Итак, у меня есть столбец «Имена». Если я сделаю:

 df['Names'].value_counts()
 

Я понимаю это:

 Mr. Richard Vance       1
Mrs. Angela Bell        1
Mr. Stewart Randall     1
Mr. Andrew Ogden        1
Mrs. Maria Berry        1
                       ..
Mrs. Lillian Wallace    1
Mr. William Bailey      1
Mr. Paul Ball           1
Miss Pippa Bond         1
Miss Caroline Gray      1
 

Все в порядке… Есть много РАЗНЫХ имен. Но я хочу, чтобы это value_counts() выполнялось только для первых символов, пока оно не перейдет к пустому символу (т.Е. пробелу, Который разделяется, например, мисс или миссис от Лилиан Уоллес), чтобы результат был, например:

Миссис 1000 Мистер 2000 Мисс 2000

Просто чтобы узнать, сколько различных вариантов существует в именах столбцов, чтобы на 2-м этапе создать другую переменную (а именно пол) на основе этих вариантов.

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

1. df['Names'].str.split().str.get(0).value_counts()

Ответ №1:

Вы можете использовать value_counts(dropna=False) on str[0] после str.split() :

 df = pd.DataFrame({'Names': ['Mr. Richard Vance','Mrs. Angela Bell','Mr. Stewart Randall','Mr. Andrew Ogden','Mrs. Maria Berry','Mrs. Lillian Wallace','Mr. William Bailey','Mr. Paul Ball','Miss Pippa Bond','Miss Caroline Gray','']})

df.Names.str.split().str[0].value_counts(dropna=False)

#  Mr.     5
#  Mrs.    3
#  Miss    2
#  NaN     1
#  Name: Names, dtype: int64
 

Ответ №2:

Если вы хотите знать уникальные значения и всегда ли есть пробел, вы можете сделать это.

 df = pd.DataFrame(['Mr. Richard Vance',
'Mrs. Angela Bell',
'Mr. Stewart Randall',
'Mr. Andrew Ogden',
'Mrs. Maria Berry',
'Mrs. Lillian Wallace',
'Mr. William Bailey',
'Mr. Paul Ball',
'Miss Pippa Bond',
'Miss Caroline Gray'], columns=['names'])

df['names'].str.split(' ').str[0].unique().tolist()
 

Вывод — это список:

 ['Mr.', 'Mrs.', 'Miss']
 

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

1. Почти есть… Просто нужно подсчитать этот список. Ваше решение лучше, потому что в моем наборе данных я вижу: [‘Mr.’, ‘Miss’, ‘Mrs.’, nan] . Теперь мне нужно знать, сколько из этих 4 возможностей существует.

Ответ №3:

Вот решение. Вы можете использовать регулярное выражение:

 #Dataset

    Names
0   Mr. Richard Vance
1   Mrs. Angela Bell
2   Mr. Stewart Randall
3   Mr. Andrew Ogden
4   Mrs. Maria Berry
5   Mrs. Lillian Wallace

df['Names'].str.extract(r'(w .s)').value_counts()

#Output:

Mr.      3
Mrs.     3

 

Примечание: (w .s) будет извлекать части Mr. и Mrs. (или любое название, например, Dr.) из имен