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

如何基于dfB匹配职位与部门填充dfA缺失的薪资字段?

问题:用dfB填充dfA的缺失薪资值

我有两个形状、顺序均不同的DataFrame:dfA和dfB,dfA是dfB的子集。两表包含Job Title、Job Department、Job Salary三列,dfA的Job Salary存在缺失值,需要通过匹配dfB中相同Job Title+Job Department的记录填充薪资(同一组合薪资一致)。

我尝试了以下代码但未成功:

condition_A = (dfA['Job Title'] == dfB['Job Title'])

condition_B = (dfA['Job Department'] == dfB['Job Department'])

dfA.loc[(condition_A) & (condition_B), 'Job Salary'] = dfB.loc[(condition_A) & (condition_B), 'Job Salary']

示例数据

import pandas as pd
import numpy as np

dataA = {
    'Job Title': ['ET', 'FT', 'ET', 'ST', 'ST'],
    'Job Department': ['T', 'T', 'PT', 'T', 'PT'],
    'Job Salary': [np.nan, 1500, 1000, np.nan, np.nan]
}
dfA = pd.DataFrame(dataA)

dataB = {
    'Job Title': ['ST', 'ET', 'RT', 'FT', 'ST', 'PT', 'ET'],
    'Job Department': ['T', 'T', 'PT', 'T', 'PT', 'T', 'PT'],
    'Job Salary': [2000, 800, 1700, 1500, 2500, 700, 1000]
}
dfB = pd.DataFrame(dataB)

期望结果

填充缺失值后的dfA:

dataA = {
    'Job Title': ['ET', 'FT', 'ET', 'ST', 'ST'],
    'Job Department': ['T', 'T', 'PT', 'T', 'PT'],
    'Job Salary': [800, 1500, 1000, 2000, 2500]
}
dfA = pd.DataFrame(dataA)

问题原因

你之前的代码错误在于直接按行索引比较dfA和dfB的列值,但两者行数、顺序完全不同,这种逐行对比无法匹配到对应的Job Title+Job Department组合,导致填充失败。

解决方案

方法1:构建薪资映射字典

先从dfB中提取(职位, 部门)到薪资的唯一映射,再用这个映射填充dfA的缺失值:

# 构建职位+部门到薪资的映射字典
salary_map = dfB.set_index(['Job Title', 'Job Department'])['Job Salary'].to_dict()

# 遍历dfA,填充缺失薪资
dfA['Job Salary'] = dfA.apply(
    lambda row: salary_map[(row['Job Title'], row['Job Department'])] 
    if pd.isna(row['Job Salary']) 
    else row['Job Salary'],
    axis=1
)

方法2:使用merge合并填充

通过merge将dfB的薪资匹配到dfA,再用fillna填充缺失值,代码更简洁:

# 合并dfA与dfB的薪资列,仅保留匹配的组合
merged_df = dfA.merge(
    dfB[['Job Title', 'Job Department', 'Job Salary']],
    on=['Job Title', 'Job Department'],
    suffixes=('', '_b'),
    how='left'
)

# 填充缺失值
dfA['Job Salary'] = dfA['Job Salary'].fillna(merged_df['Job Salary_b'])

两种方法都能得到你期望的结果,其中方法2更符合pandas的惯用写法,效率也更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:32:43