假设我有一个向量ValsHR
,如下所示:
valsHR=[78.8, 82.3, 91.0]
我有一个数据框MainData
Age Patient HR
21 1 NaN
21 1 NaN
21 1 NaN
30 2 NaN
30 2 NaN
24 3 NaN
24 3 NaN
24 3 NaN
我想要填充 NaN,以便 valsHR 中的第一个值将仅填充患者 1 的 NaN,第二个值将填充患者 2 的 NaN,第三个值将填充患者 3 的 NaN。
到目前为止我已经尝试过使用这个:
mainData['HR'] = mainData['HR'].fillna(ValsHR)
但它用向量中的第一个值填充所有 NaN。
我也尝试过使用这个:
mainData['HR'] = mainData.groupby('Patient').fillna(ValsHR)
使用 valsHR
向量中根本不存在的值填充 NaN。
我想知道是否有人知道如何做到这一点?
最佳答案
根据包含缺失值的Patient
值创建字典,映射
到原始列并仅替换缺失值:
print (df)
Age Patient HR
0 21 1 NaN
1 21 1 NaN
2 21 1 NaN
3 30 2 100.0 <- value is not replaced
4 30 2 NaN
5 24 3 NaN
6 24 3 NaN
7 24 3 NaN
p = df.loc[df.HR.isna(), 'Patient'].unique()
valsHR = [78.8, 82.3, 91.0]
df['HR'] = df['HR'].fillna(df['Patient'].map(dict(zip(p, valsHR))))
print (df)
Age Patient HR
0 21 1 78.8
1 21 1 78.8
2 21 1 78.8
3 30 2 100.0
4 30 2 82.3
5 24 3 91.0
6 24 3 91.0
7 24 3 91.0
如果某些组没有 NaN:
print (df)
Age Patient HR
0 21 1 NaN
1 21 1 NaN
2 21 1 NaN
3 30 2 100.0 <- group 2 is not replaced
4 30 2 100.0 <- group 2 is not replaced
5 24 3 NaN
6 24 3 NaN
7 24 3 NaN
p = df.loc[df.HR.isna(), 'Patient'].unique()
valsHR = [78.8, 82.3, 91.0]
df['HR'] = df['HR'].fillna(df['Patient'].map(dict(zip(p, valsHR))))
print (df)
Age Patient HR
0 21 1 78.8
1 21 1 78.8
2 21 1 78.8
3 30 2 100.0
4 30 2 100.0
5 24 3 82.3
6 24 3 82.3
7 24 3 82.3
关于python - 如何使用每个向量条目来填充数据帧中单独组的 NAN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68161652/