【发布时间】:2021-06-15 13:02:17
【问题描述】:
我正在处理一些数据,我每小时都会对患者进行观察。在某些情况下,特定患者的某些特征完全是空的。我试图找到一种方法来通过使用恒定平均值来估算数据,该平均值基于具有相同性别和相似年龄的其他 50 名患者的人口子集。我对以下数据进行了简化:
| HR | O2Sat | Temp | Platelets | Age | Gender | PatientID |
|---|---|---|---|---|---|---|
| 80 | 98 | 36.5 | NaN | 52 | 1 | A0 |
| 82 | 96 | 37.0 | NaN | 52 | 1 | A0 |
| 82 | 100 | 36.3 | 160 | 53 | 1 | A1 |
| 90 | 93 | 36.6 | 165 | 53 | 1 | A1 |
| 83 | 95 | 35.9 | 140 | 23 | 0 | A2 |
| 79 | 98 | 36.2 | 155 | 23 | 0 | A2 |
| 88 | 92 | 36.6 | 163 | 60 | 0 | A3 |
| 90 | 91 | 36.3 | 165 | 60 | 0 | A3 |
| 81 | 95 | 37.1 | NaN | 20 | 0 | A4 |
| 81 | 92 | 36.9 | NaN | 20 | 0 | A4 |
我已经按年龄对数据框进行了重新排序,并且到目前为止有这段代码
data = data.sort_values(['Age']).groupby(['PatientID','Gender']).apply(lambda x: x.fillna(x.mean()))
但我知道这将使用所有可用数据来找到平均值,但我不确定如何将其限制为 50 名年龄相近的患者。
【问题讨论】:
-
你的意思是
.groupby(['PatientID','Gender'])吗? -
一种可能的方法是首先计算另一个列,将“年龄相似 + 性别”的患者分类。也许通过 np.where() 的组合,或带有年龄 bin 的映射表。然后您可以将此列放入您的 groupby 中,然后 lambda 函数将传递到该组?
标签: python imputation data-preprocessing