微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用每个向量条目填充数据帧中单独组的 NAN

如何解决如何使用每个向量条目填充数据帧中单独组的 NAN

假设我有一个看起来像这样的向量 struct

ValsHR

我有一个数据框 valsHR=[78.8,82.3,91.0]

MainData

我想填充 NaN,以便 valsHR 中的第一个值只填充患者 1 的 NaN,第二个值填充患者 2 的 NaN,第三个值填充患者 3。

到目前为止我已经尝试过使用这个: 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。

我也试过使用这个: mainData['HR'] = mainData['HR'].fillna(ValsHR) 用根本不在 mainData['HR'] = mainData.groupby('Patient').fillna(ValsHR) 向量中的值填充 NaN。

我想知道是否有人知道这样做的方法

解决方法

通过 Patient 值和缺失值创建字典,map 到原始列并仅替换缺失值:

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(),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
,

它只是映射,如果所有的NaN都应该被替换

import pandas as pd
from io import StringIO


valsHR=[78.8,91.0]
vals = {i:k for i,k in enumerate(valsHR,1)}

df = pd.read_csv(StringIO("""Age  Patient             
21   1
21   1
21   1
30   2
30   2
24   3
24   3
24   3"""),sep="\s+")


df["HR"] = df["Patient"].map(vals)

>>> df
   Age  Patient    HR
0   21        1  78.8
1   21        1  78.8
2   21        1  78.8
3   30        2  82.3
4   30        2  82.3
5   24        3  91.0
6   24        3  91.0
7   24        3  91.0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。