Python中基于指定列Submitted的值实现条件替换缺失值
解决方案
核心逻辑为:仅对Submitted列为空的行执行前向填充,Submitted为1的行完全保留原始值。
操作步骤
- 先对目标列做全局前向填充,得到所有空值被前值覆盖的临时表
- 用掩码把
Submitted为1的行替换回原始值,保证这部分行的空值不被修改
完整代码示例
import pandas as pd import numpy as np # 示例构造数据,实际使用时替换为你自己的DataFrame即可 df = pd.DataFrame({ 'Year': [2020, np.nan, 2022, np.nan], 'Country': ['美国', np.nan, '英国', np.nan], 'Submitted': [1, np.nan, 1, np.nan], 'Age12': [12.3, np.nan, 14.1, np.nan], 'Age14': [14.2, np.nan, 16.5, np.nan] }) # 如果不需要填充Submitted列,先指定要填充的列范围 fill_columns = [col for col in df.columns if col != 'Submitted'] # 生成全局前向填充的临时表 df_ffill = df.copy() df_ffill[fill_columns] = df_ffill[fill_columns].ffill(axis=0) # 仅保留Submitted为空行的填充结果,Submitted=1的行复用原始数据 df_final = df_ffill.mask(df['Submitted'] == 1, other=df)
代码说明
- 提前筛选排除
Submitted列是为了避免该列的空值被填充,符合业务逻辑 mask方法是向量化操作,相比逐行遍历判断效率高得多,适合处理百万级以上的数据集
内容的提问来源于stack exchange,提问作者CelloRibeiro
相关产品推荐
相关产品推荐

