拆分Dataframe列中的值列表

时间:2018-06-16 04:57:15

标签: python pandas dataframe data-visualization

我正在使用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,并可视化负责最大的年龄组。枪支暴力。 不幸的是,我只能分裂,但没有达到我想要的目的。

1 个答案:

答案 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