如何在RollNo非空时检查同行Name列是否为空并返回指定值?
解决方案
问题核心
仅需在RollNo列非空时,检查同行Name列是否为空,若为空则标记为"NO"。原代码存在空值判断错误与逻辑范围不符的问题。
错误原因分析
- 空值判断错误:原代码用
astype(str).notnull()处理空值,会将Pandas的NaN转为字符串"nan",此时notnull()会返回True,无法正确识别Name列的空值。 - 逻辑范围偏差:
!=的逻辑会同时选中两种反向情况(RollNo空但Name非空、RollNo非空但Name空),但你只需要后者。
正确实现代码
方法1:使用numpy.where生成结果列
import numpy as np # 新增列存储结果:RollNo非空且Name为空时返回"NO",否则保留原Name值 u_op['Check_Result'] = np.where( u_op['RollNo'].notna() & u_op['Name'].isna(), 'NO', u_op['Name'] )
方法2:使用loc直接定位赋值
# 初始化结果列为原Name值 u_op['Check_Result'] = u_op['Name'] # 定位目标行并赋值"NO" u_op.loc[u_op['RollNo'].notna() & u_op['Name'].isna(), 'Check_Result'] = 'NO'
补充说明
若无需新增列,只想直接修改Name列符合条件的行:
u_op.loc[u_op['RollNo'].notna() & u_op['Name'].isna(), 'Name'] = 'NO'
内容的提问来源于stack exchange,提问作者Aniket Chowdhury
相关产品推荐
相关产品推荐

