You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pandas中通过链式操作按多条件填充DataFrame列缺失值

两种方案均可实现需求,可根据使用习惯选择

你提到的两种实现方式都能满足填充要求,没有功能层面的优劣,仅写法和适用场景有区别:

np.select实现方案

代码写法更紧凑,后续如果新增规则只需在条件列表和结果列表同步加对应项即可,维护成本更低:

import pandas as pd
import numpy as np

# 原始DataFrame构造代码
df = pd.DataFrame({"CLIENT_ID": [8222, 8222, 8222, 8222, 8300, 8300, 8300, 8300, 8300, 8400, 8401, 8401, 8500],
                   "ENCOUNTER_DATE": ['2020-01-01', '2020-03-02', '2020-04-18', '2020-07-31', '2017-06-10', '2017-09-11', '2018-02-01', '2018-04-01', '2018-05-31', '2020-12-31', '2017-08-29', '2017-09-15', '2018-10-10'],
                   "STAGE": ['STAGE1', np.NaN, 'STAGE1', 'STAGE1', np.NaN, np.NaN, np.NaN, np.NaN, np.NaN, np.NaN, np.NaN,np.NaN, 'STAGE2'],
                   "Status": ['Healthy', 'Asymptomatic', 'Asymptomatic','Asymptomatic', 'Extremely Ill', 'Extremely Ill', 'Extremely Ill', 'Extremely Ill', 'Extremely Ill', np.NaN, 'Asymptomatic', 'Asymptomatic', 'Mild Sickness']})

# 仅筛选STAGE为空的行做处理,保留原有非空值
mask_na_stage = df['STAGE'].isna()
cond_list = [
    mask_na_stage & df['Status'].isin(['Asymptomatic', 'Healthy']),
    mask_na_stage & (df['Status'] == 'Mild Sickness'),
    mask_na_stage & (df['Status'] == 'Extremely Ill'),
    mask_na_stage & df['Status'].isna()
]
choice_list = ['STAGE1', 'STAGE2', 'STAGE3', 'STAGE1']

df['STAGE'] = np.where(mask_na_stage, np.select(cond_list, choice_list), df['STAGE'])

df.loc实现方案

写法更直白,不需要记忆numpy函数的参数规则,适合规则固定不常调整的场景:

# 还是先筛选STAGE为空的行
mask_na_stage = df['STAGE'].isna()

df.loc[mask_na_stage & df['Status'].isin(['Asymptomatic', 'Healthy']), 'STAGE'] = 'STAGE1'
df.loc[mask_na_stage & (df['Status'] == 'Mild Sickness'), 'STAGE'] = 'STAGE2'
df.loc[mask_na_stage & (df['Status'] == 'Extremely Ill'), 'STAGE'] = 'STAGE3'
df.loc[mask_na_stage & df['Status'].isna(), 'STAGE'] = 'STAGE1'

补充说明

你的填充规则是行级别的匹配逻辑,不需要用到同CLIENT_ID下其他行的信息,所以提前做好的分组排序结果不需要额外调用,两种方案直接全表运行即可得到正确结果。

内容的提问来源于stack exchange,提问作者Mazil_tov998

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:09:02