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

Python Pandas:基于唯一员工ID条件更新多行缺失薪资值

问题:用备份数据填充主DataFrame的缺失薪资字段

问题场景

主DataFrame(df)里同一员工对应多行数据,薪资字段(Previous_sal、current_salary)存在缺失;另有备份CSV文件a_bkp.csv存着对应员工的完整薪资数据。之前用update方法更新时错误修改了无关员工的数据,需求是只填充主DataFrame中存在空值的员工行,用备份文件里对应Employee_id的数据补全。

主DataFrame示例

Employee_id Previous_sal current_salary
1                    
1                 
1                   
2       1000          1500

备份CSV(a_bkp.csv)示例

Employee_id Previous_sal current_salary
1              2000       3000 

预期输出

Employee_id Previous_sal current_salary
1            2000        3000                
1            2000        3000     
1            2000        3000
2            1000        1500

错误代码(导致更新无关员工)

test2=pd.read_csv('./a_bkp.csv')
emp.update(test2,join='left',overwrite=False)

正确解决方案

高效实现代码(推荐)

用向量化操作替代循环,适合大数据量场景,同时精准匹配员工ID填充空值:

import pandas as pd

# 读取主数据和备份数据
df = pd.read_csv('你的主数据文件路径.csv')  # 替换成实际路径
test2 = pd.read_csv('./a_bkp.csv')

# 合并备份数据到主DataFrame,保留原字段和备份字段
merged_df = df.merge(test2, on='Employee_id', how='left', suffixes=('', '_bkp'))

# 用备份值填充原字段的空值,不覆盖已有有效值
df['Previous_sal'] = df['Previous_sal'].fillna(merged_df['Previous_sal_bkp'])
df['current_salary'] = df['current_salary'].fillna(merged_df['current_salary_bkp'])

逻辑说明

  1. 通过merge按Employee_id关联主数据和备份数据,给备份字段加后缀区分;
  2. 用fillna只替换原字段的空值,已有有效值完全保留;
  3. 全程只针对匹配到Employee_id的行操作,不会影响无关员工的数据。

小数据集可选方案(逻辑直观)

如果数据量小,也可以用迭代行的方式实现:

import pandas as pd

df = pd.read_csv('你的主数据文件路径.csv')
test2 = pd.read_csv('./a_bkp.csv')

# 把备份数据转成以Employee_id为键的字典,方便快速查找
salary_dict = test2.set_index('Employee_id')[['Previous_sal', 'current_salary']].to_dict('index')

# 遍历主DataFrame,只填充空值行
for idx, row in df.iterrows():
    emp_id = row['Employee_id']
    # 只有当前行薪资字段为空,且备份里有该员工数据时才填充
    if pd.isna(row['Previous_sal']) or pd.isna(row['current_salary']):
        if emp_id in salary_dict:
            df.at[idx, 'Previous_sal'] = salary_dict[emp_id]['Previous_sal']
            df.at[idx, 'current_salary'] = salary_dict[emp_id]['current_salary']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:25:17