我正在使用Kaggle的Gun暴力数据集,该数据集的年龄栏如下:
In [5]: df['participant_age_group'].head()
Out [5]:
0 0::Adult 18+||1::Adult 18+||2::Adult 18+||3::A...
1 0::Adult 18+||1::Adult 18+||2::Adult 18+||3::A...
2 0::Adult 18+||1::Adult 18+||2::Adult 18+||3::A...
3 0::Adult 18+||1::Adult 18+||2::Adult 18+||3::A...
4 0::Adult 18+||1::Adult 18+||2::Teen 12-17||3::...
Name: participant_age_group, dtype: object
0::
,1::
对应索引。所以我想拆分它们并形成一个没有的全新数据帧。属于那个年龄组的人,总数没有。那个属于那个年龄组的人说df_age
。例如:
Age Group No_of_people
18 300
25 210
30 100
这样我就可以.groupby(age)
和No_of_people.value_counts()
No._of_people
,并可视化负责最大的年龄组。枪支暴力。
不幸的是,我只能分裂,但没有达到我想要的目的。
答案 0 :(得分:0)
我从这个输入开始:
df = pd.DataFrame({'participant_age_group':['0::Adult 18+||1::Adult 18+||2::Adult 18+||',
'0::Adult 18+||1::Adult 18+||2::Adult 18+||',
'0::Adult 25+||1::Adult 25+||2::Adult 30+||',
'0::Adult 18+||1::Adult 18+||2::Teen 12-17||']})
然后创建df_age
:
df_age = (df['participant_age_group'].str.replace('+','')
.str.split('\|{2}',expand=True).stack()
.str.split(' ',expand=True).dropna()
.groupby(1,as_index=False).count()
.rename(columns={0:'No_of_people',1:'Age_group'}))
对代码的一些解释。
str.split('\|{2}',expand=True).stack()
拆分符号||
在string
中的每一行,堆栈将在列中展开,而不是在行中展开。你得到这样的东西,其中第一级索引是原始df
中的行号。
0 0 0::Adult 18
1 1::Adult 18
2 2::Adult 18
3
1 0 0::Adult 18
1 1::Adult 18
...
(我不打印所有数据)。然后str.split(' ',expand=True).dropna()
将每个字符串拆分为空格(在年龄之前)并且还删除空行以获取:
0 1
0 0 0::Adult 18
1 1::Adult 18
2 2::Adult 18
1 0 0::Adult 18
1 1::Adult 18
...
在这里你可以看到你创建了两个列,0和1,在第1列中你有年龄,所以你只需要对这个列进行分组并用groupby(1,as_index=False).count()
计算每个年龄的出现次数
根据我的输入,df_age
就像:
Age_group No_of_people
0 12-17 1
1 18 8
2 25 2
3 30 1