Pandas中如何基于其他列取值按规则填充DataFrame列缺失值
pandas按性别规则填充eGFR列缺失值实现方法
处理逻辑
- 先统一清洗eGFR列格式:将字符串形式的缺失标记、带前置空格的数值统一转换为浮点类型,确保pandas可正确识别空值
- 分别按给定公式计算男性、女性对应的eGFR基准值
- 定位eGFR为空的行,按性别匹配对应计算值完成填充,全程使用pandas向量化运算,无循环效率更高
完整实现代码
import pandas as pd import io csv_data = ''' gender,age,Cr,eGFR 1,76,0.56,60.7 1,50,0.76, 70.6 2,64,0.62,55.9 1,62,0.45,Nan 1,68,0.88,80.2 2,69,0.65,Nan 1,70,0.64,62.8 2,65,0.39,60.2 ''' df = pd.read_csv(io.StringIO(csv_data)) # 清洗eGFR列,转换为数值类型,自动识别空值、处理带空格的数值 df['eGFR'] = pd.to_numeric(df['eGFR'], errors='coerce') # 按公式分别计算男女eGFR基准值 male_calc = 194 * df['Cr'] - 1.094 * df['age'] - 0.287 female_calc = 194 * df['Cr'] - 1.094 * df['age'] - 0.287 * 0.739 # 按性别匹配填充缺失值 df.loc[(df['gender'] == 1) & (df['eGFR'].isna()), 'eGFR'] = male_calc df.loc[(df['gender'] == 2) & (df['eGFR'].isna()), 'eGFR'] = female_calc
填充结果说明
填充完成后原2个缺失值的计算结果:
- 62岁男性(Cr=0.45):eGFR填充值为19.185
- 69岁女性(Cr=0.65):eGFR填充值为50.402(保留三位小数)
其余原有非空值不受任何影响。
内容的提问来源于stack exchange,提问作者Dai
相关产品推荐
相关产品推荐

