如何简洁高效地基于另一列非空值填充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
相关产品推荐
相关产品推荐

