如何让pandas DataFrame的apply仅对Col1为NaN/Null的行生效?
解决方案
方法1:直接修改lambda逻辑(仅改一行代码即可)
把原apply语句替换为如下内容即可:
df['new_col'] = df.apply(lambda x: sample_func(x['Col1'], x['Col2'], 'xxxxxx') if pd.isna(x['Col1']) else '', axis = 1)
逻辑说明:通过pd.isna()判断当前行Col1是否为空值(同时兼容识别NaN、Null两种空值格式),仅为空时执行自定义函数,否则返回空字符串,直接匹配需求效果。
方法2:仅筛选目标行执行(更推荐,性能更优)
因为你的自定义函数涉及API调用,全量行执行会浪费不必要的请求资源,更推荐只对需要处理的行执行逻辑:
# 先初始化新列为空 df['new_col'] = '' # 仅筛选Col1为NaN的行执行函数赋值 mask = df['Col1'].isna() df.loc[mask, 'new_col'] = df[mask].apply(lambda x: sample_func(x['Col1'], x['Col2'], 'xxxxxx'), axis=1)
该方案只会对符合条件的行发起API请求,数据量越大性能优势越明显。
两种方案运行后输出结果完全符合预期:
Col1 Col2 new_col 0 1.0 1 1 9.0 3 2 NaN 5 nan,-5-xxxxxx
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

