你能用Pandas在特定的字符间隔上进行数值计数吗?

2024-05-16 13:24:42 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我有一个专栏“名字”。如果我这样做:

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

没关系。。。Thera有很多不同的名字。但我想做的是只对第一个字符执行这个值_counts(),直到它到达空字符(即,分隔的空间,例如Lillian Wallace的Miss或Mrs.),这样输出将是,例如:

1000太太 2000先生 2000小姐

只是想知道列名中有多少不同的变量,以便在第二阶段根据这些变量创建另一个变量(即性别)


Tags: richarddfnamesvalue名字mrmrscounts
3条回答

如果你想知道唯一的值,如果总有一个空间,你可以这样做

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']

这里有一个解决方案。您可以使用正则表达式:

#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)将从姓名中提取parts先生和夫人(或任何像Dr.这样的头衔)

您可以在^{}之后的str[0]上使用^{}

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

相关问题 更多 >