如何基于人群占比为DataFrame未就诊观测值分配随机填充病症
基于指定概率填充DataFrame缺失病症值
实现步骤
- 保留原始数据:创建新列
imputed_problem,完全复制原problem列内容,确保原始观测值不受修改。 - 定位待填充行:筛选出
imputed_problem值为left before being seen的目标行。 - 按概率生成填充值:利用numpy的随机抽样工具,按照给定的病症占比生成对应数量的填充内容。
- 替换目标行:将生成的填充值替换到对应的待填充行中。
代码实现
import pandas as pd import numpy as np # 定义病症及对应的人群占比 conditions = ['sprain', 'cut', 'infection'] probabilities = [0.3, 0.5, 0.2] # 复制原列生成新列,保留所有原始数据 df['imputed_problem'] = df['problem'].copy() # 筛选出需要填充的行 fill_mask = df['imputed_problem'] == 'left before being seen' num_to_fill = fill_mask.sum() # 按指定概率随机生成填充值 # 若需要固定随机结果(可复现),添加 np.random.seed(自定义数字) filled_conditions = np.random.choice(conditions, size=num_to_fill, p=probabilities) # 替换目标行的内容 df.loc[fill_mask, 'imputed_problem'] = filled_conditions
关键说明
np.random.choice的p参数可精准指定每个选项的抽样概率,当待填充样本量足够大时,实际分配比例会趋近于设定的0.3/0.5/0.2,适配全量人群数据的需求。- 新列
imputed_problem仅修改未就诊的观测值,其余原始病症数据会完整保留。
内容的提问来源于stack exchange,提问作者Emma541
相关产品推荐
相关产品推荐

