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

基于参考表按特定行列规则填充DataFrame中的NaN值

解决Pandas DataFrame按参考表填充缺失值的问题

先定义示例数据(贴合你的场景)

假设你的参考表ref和业务表df结构如下:

import pandas as pd

# 参考表:存储人员固定的Target和Bonus
ref = pd.DataFrame({
    'Name': ['Joe', 'Phil', 'Dean'],
    'Target': [100, 120, 90],
    'Bonus': [20, 25, 18]
})

# 业务表:含周次数据,部分字段为NaN
df = pd.DataFrame({
    'Name': ['Joe', 'Joe', 'Phil', 'Dean', 'Dean'],
    'Week': [1, 2, 1, 1, 2],
    'Target': [100, pd.NA, pd.NA, 90, pd.NA],
    'Bonus': [pd.NA, 20, pd.NA, pd.NA, 18],
    'Score': [85, pd.NA, 110, pd.NA, pd.NA]
})

分步实现填充逻辑

  1. 构建人员与固定值的映射字典
    把参考表转换成以Name为键的字典,方便快速匹配填充:
target_map = ref.set_index('Name')['Target'].to_dict()
bonus_map = ref.set_index('Name')['Bonus'].to_dict()
  1. 填充Target和Bonus的缺失值
    用fillna结合map,根据人员匹配参考表的固定值:
df['Target'] = df['Target'].fillna(df['Name'].map(target_map))
df['Bonus'] = df['Bonus'].fillna(df['Name'].map(bonus_map))
  1. 填充Score的缺失值为对应人员的Target
    此时Target已经补全,直接用当前行的Target值填充Score的NaN:
df['Score'] = df['Score'].fillna(df['Target'])

最终输出结果

执行上述代码后,df的结果如下:

Name  Week  Target  Bonus  Score
0    Joe     1     100     20   85.0
1    Joe     2     100     20  100.0
2   Phil     1     120     25  110.0
3   Dean     1      90     18   90.0
4   Dean     2      90     18   90.0

补充说明

如果你的数据量较大,这种基于字典映射的方法效率很高;如果需要更复杂的关联逻辑,也可以用pd.merge将参考表和业务表关联后填充,但对于当前场景,字典映射是最简洁的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:06:10