如何根据Pandas中的其他列值计算每个年龄的平均值

问题描述 投票:0回答:3

我正在寻找一种方法来获得每个年龄段的平均婚姻状况:

例如,对于34岁的人来说,婚姻状况的中位数是单身,35岁则是单身,依此类推。

我对数据帧进行分组

df_edad_estado_civil.groupby(['Estado_Civil', 'Edad'], as_index=False).mean() 

但它会发出如下错误:

DataError: No numeric types to aggregate

基本上,这是我的DataFrame的一部分:


    Edad    Estado_Civil
0   38  Soltero
1   26  Casado
2   26  Soltero
4   38  Soltero
5   24  Soltero
6   28  Soltero
7   30  Casado
8   32  Soltero
9   19  Soltero
10  28  Soltero
11  45  Casado
12  27  Soltero
13  41  Casado
14  45  Casado
15  38  Soltero

我需要得到每个年龄段的中位数列表,如下所示:

years_old  status_mediam
  34         single
   .            .
  36          single
  37          married 
   38         married ....
   45         divorced and so on.
python jupyter-notebook pandas-groupby data-science mean
3个回答
0
投票

Estado_Civil列转换为数字类型,其中0表示已婚,1表示单身,其中的内容为“df.Estado_Civil = df.Estado_Civil.apply(lambda x:1 *(x =='single'))。然后执行groupby。

在应用.mean()之前选择特定的列也是有用的,例如, df.groupby(['Estado_Civil', 'Edad'], as_index=False)['Estado_Civil'].mean()


0
投票

我认为这些数据显示出线性因为人们会随着年龄的增长而结婚。因此,它可以用线性方程表示。基本上,它可以通过机器学习的线性回归模型来解决。我认为你正在制作某种机器学习模型。无论如何,这是我计算婚姻状况平均值的示例代码。

data = [[38, 'Soltero'],
        [26, 'Casado'],
        [26, 'Soltero'],
        [38, 'Soltero'],
        [24, 'Soltero'],
        [28, 'Soltero'],
        [30, 'Casado'],
        [19, 'Soltero'], 
        [28, 'Soltero'],
        [45, 'Casado'],
        [27, 'Soltero'],
        [41, 'Casado'],
        [45, 'Casado'],
        [38, 'Soltero']]

df_edad_estado_civil = pd.DataFrame(data, columns=list(['Estado_Civil', 'Edad']))
result = df_edad_estado_civil['Estado_Civil'].groupby(df_edad_estado_civil['Edad']).mean() 
print (df_edad_estado_civil)
print (result)

结果:

    Estado_Civil     Edad
0             38  Soltero
1             26   Casado
2             26  Soltero
3             38  Soltero
4             24  Soltero
5             28  Soltero
6             30   Casado
7             19  Soltero
8             28  Soltero
9             45   Casado
10            27  Soltero
11            41   Casado
12            45   Casado
13            38  Soltero
Edad
Casado     37.400000
Soltero    29.555556

0
投票

您正在寻找的是统计mode,这是最常出现的值:

df_edad_estado_civil.groupby('Edad')['Estado_Civil'].agg(pd.Series.mode)

See this answer了解更多详情。


推荐问答