全部
我的数据集的头部如下所示。我过滤了“年龄”和“缺勤时间(以小时为单位)”列,并计算了平均小时数。现在,我想根据“年龄”列进行分类。我该如何执行呢?我想将年龄设为31-33岁,年龄34-36岁,年龄37-39岁
{'Age': {0: 33, 2: 38, 3: 39, 4: 33, 5: 38}, 'BMI': {0: 30, 2: 31, 3: 24, 4: 30, 5: 31}, 'Social_drinker': {0: 1, 2: 1, 3: 1, 4: 1, 5: 1}, 'Social_smoker': {0: 0, 2: 0, 3: 1, 4: 0, 5: 0}, 'Son': {0: 2, 2: 0, 3: 2, 4: 2, 5: 0}, 'Day_of_the_week': {0: 3, 2: 4, 3: 5, 4: 5, 5: 6}, 'Month_of_absence': {0: 7, 2: 7, 3: 7, 4: 7, 5: 7}, 'Seasons': {0: 1, 2: 1, 3: 1, 4: 1, 5: 1}, 'Service_time': {0: 13, 2: 18, 3: 14, 4: 13, 5: 18}, 'Absenteeism_time_in_hours': {0: 4, 2: 2, 3: 4, 4: 2, 5: 2}}
我的过滤代码
filter= df.filter(['Age','Absenteeism_time_in_hours'], axis=1)
group=filter.groupby('Age').mean()[['Absenteeism_time_in_hours']]
如果您能提供很好的解释,我是python的新手!
答案 0 :(得分:2)
您正在寻找功能cut
。可以在您的数据上按以下方式使用它:
group.groupby(pd.cut(group.index, [31, 33, 36, 39])).mean().fillna(0)
这将导致
Absenteeism_time_in_hours
(31, 33] 3
(33, 36] 0
(36, 39] 3
如您所见,您指定了垃圾箱的边缘,它为您处理了其余部分。
不过,我强烈建议您不要对结果分组,因为那样会得到错误的答案。您应该使用原始数据,以便可以正确计算每个分类组中个体的平均值。
请注意,上一个年龄段的年龄差异
(df.groupby(pd.cut(df.Age, [31, 33, 36, 39]))
.Absenteeism_time_in_hours.mean().fillna(0))
结果:
Age
(31, 33] 3.000000
(33, 36] 0.000000
(36, 39] 2.666667