如何根据Pandas中的其他列值计算每个年龄的平均值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据Pandas中的其他列值计算每个年龄的平均值相关的知识,希望对你有一定的参考价值。
我正在寻找一种方法来获得每个年龄段的平均婚姻状况:
例如,对于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了解更多详情。
以上是关于如何根据Pandas中的其他列值计算每个年龄的平均值的主要内容,如果未能解决你的问题,请参考以下文章
Python散点图设计 - 根据其他列值为x轴选择变量的特定值