我正在寻找一种方法来获得每个年龄段的平均婚姻状况:
例如,对于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.
将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()
我认为这些数据显示出线性因为人们会随着年龄的增长而结婚。因此,它可以用线性方程表示。基本上,它可以通过机器学习的线性回归模型来解决。我认为你正在制作某种机器学习模型。无论如何,这是我计算婚姻状况平均值的示例代码。
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
您正在寻找的是统计mode
,这是最常出现的值:
df_edad_estado_civil.groupby('Edad')['Estado_Civil'].agg(pd.Series.mode)
See this answer了解更多详情。