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

如何简洁高效地基于另一列非空值填充DataFrame指定列空值?

高效替换DataFrame中指定条件的空值

需求说明

当DataFrame的列A为空值(NaN),且同一行的列B非空时,将A的值替换为B的值;若两列均为空则跳过操作。

测试数据

import numpy as np
import pandas as pd

test = {'A': [3, np.nan, np.nan, 0], 'B': [4, 5, np.nan, 10]}
test_df = pd.DataFrame.from_dict(test)

简洁高效的实现方法

方法1:使用combine_first(最简洁)

combine_first专门用于用另一列的值填充当前列的NaN,且仅当另一列非空时生效,完全匹配需求:

test_df['A'] = test_df['A'].combine_first(test_df['B'])

方法2:使用fillna结合where

通过where过滤出B列非空的值,再用fillna填充A的NaN:

test_df['A'] = test_df['A'].fillna(test_df['B'].where(test_df['B'].notna()))

方法3:使用loc布尔掩码赋值

先构造精准的条件掩码,直接对目标行赋值,逻辑清晰直观:

# 构造掩码:A为空且B非空
mask = test_df['A'].isna() & test_df['B'].notna()
# 对符合条件的行赋值
test_df.loc[mask, 'A'] = test_df.loc[mask, 'B']

验证结果

执行上述任意方法后,test_df的输出与期望一致:

A     B
0  3.0   4.0
1  5.0   5.0
2  NaN   NaN
3  0.0  10.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:35:19