我为患者设置了数据集,我想处理这些数据的缺失值,它包含数字和文本,这是我想根据受试者ID处理的想法。不基于列替换仅数据集如下所示
subject_id time heart_rate blood_pressure urine_color
1 1.10 23 60 red
1 2 40
2 3 60 80
2 4 dark yellow
我想将文本数据替换为最常用的患者数据,并将数值替换为患者的平均值,就像这样
subject_id time heart_rate blood_pressure urine_color
1 1.10 23 60 red
1 2 23 40 red
2 3 60 80 dark yellow
2 4 60 80 dark yellow
任何人都可以帮助解决这一问题,我可以搜索所有估算方法,在列中使用频率最高,或者对整个列进行统计分析
使用GroupBy.transform
自定义功能mean
与数字列,并mode
为categoricals列,并通过替换缺失值DataFrame.fillna
:
f = lambda x: x.mean() if np.issubdtype(x.dtype, np.number) else x.mode().iat[0]
如果可能,请替代NaN
每个组中分类列的所有s值:
f = lambda x: x.mean() if np.issubdtype(x.dtype, np.number) else next(iter(x.mode()), None)
cols = df.columns.difference(['subject_id'])
df[cols] = df[cols].fillna(df.groupby('subject_id')[cols].transform(f))
print (df)
subject_id time heart_rate blood_pressure urine_color
0 1 1.1 23 60 red
1 1 2 23 40 red
2 2 3 60 80 dark yellow
3 2 4 60 80 dark yellow
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句