我正在寻找一种获取每个年龄段的平均婚姻状况的方法:
例如,对于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.
答案 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了解更多详情。