如何在同一DataFrame中将一列值更新到另一列且保留原有非空值
原有代码的问题
- 你只对
Location单列执行apply操作,lambda函数只能拿到当前行的Location值,无法获取同一行对应的Pay列原值,自然没法实现保留原Pay值的逻辑 - 你的判断逻辑完全写反了:需求是Pay列为空时才用Location值覆盖,你原来的逻辑是Location不为空就覆盖Pay,和需求完全不符
推荐实现方案
优先用pandas向量化操作实现,比apply性能高很多,写法也更简洁:
情况1:空值是空字符串''
用where方法实现,逻辑是满足条件时保留原值,不满足时用第二个参数填充:
df['Pay'] = df['Pay'].where(df['Pay'] != '', df['Location'])
情况2:空值是pandas默认的NaN
直接用fillna方法即可:
df['Pay'] = df['Pay'].fillna(df['Location'])
如果你一定要用apply实现
需要对整个DataFrame按行遍历(指定axis=1),此时lambda可以拿到整行的所有字段值:
# 逻辑:当前行Pay为空时返回Location值,否则返回原Pay值 df['Pay'] = df.apply(lambda row: row['Location'] if row['Pay'] == '' else row['Pay'], axis=1)
内容的提问来源于stack exchange,提问作者Randy Chng
相关产品推荐
相关产品推荐

