首页 > 解决方案 > 拆分数据框列中的值列表

问题描述

我正在使用来自 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最大的年龄组。枪支暴力。不幸的是,我只能分裂,但不能达到我想要的。

标签: pythonpandasdataframedata-visualization

解决方案


我从这个输入开始:

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

推荐阅读