如何根据熊猫的另一列值计算每个年龄的平均值

时间:2019-04-29 12:31:14

标签: python jupyter-notebook pandas-groupby data-science mean

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

例如,对于34岁的人,其平均武术状态为“单身”, 对于35,它也是Single,依此类推。

我将数据框分组

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.

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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

答案 2 :(得分:0)

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

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

See this answer了解更多详情。