python - 拆分数据框列中的值列表
问题描述
我正在使用来自 Kaggle 的枪支暴力数据集,该数据集的年龄列如下:
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
最大的年龄组。枪支暴力。不幸的是,我只能分裂,但不能达到我想要的。
解决方案
我从这个输入开始:
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
推荐阅读
- vue.js - Vue js中从模板调用函数的机制是什么
- java - 使用泛型将一个对象转换为另一个对象
- spring-integration - 异步拆分/聚合网关流
- c# - 我有将日期转换为二进制然后转换为十六进制的 SQL 查询?我如何在 c# 上编写相同的逻辑?
- c# - 使用 DefaultRequestHeaders 发送请求两次?
- git - git merge 命令以 1 退出,如果它已经是最新的
- azure - PowerShell Azure 存储模拟器
- android - Android 应用程序是否可以忽略所有物理用户输入?
- android - ImageButton 自动旋转选中的图片
- ios - 如何在容器视图中显示 WKWebView 内容