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

如何使用Pandas根据共同属性从另一表填充列的缺失值?

Pandas: 用第二个数据集填充第一个数据集的缺失ID值

嘿,这个需求其实挺常见的,咱们用Pandas可以轻松搞定,给你两种实用的方案,你可以根据自己的场景选:

方法一:用map()快速映射填充

这种方法最简洁,适合数据量不大的情况。核心思路是先从第二个数据集里构建一个「名字-ID」的映射字典,然后用这个字典去匹配第一个数据集的名字,自动填充缺失的ID值。

import pandas as pd

# 先模拟你的两个数据集
df1 = pd.DataFrame({
    'Name': ['Alla', 'Peter', 'Sara', 'Maria'],
    'ID': [3, pd.NA, pd.NA, pd.NA]
})

df2 = pd.DataFrame({
    'Name_name': ['Alla', 'Peter', 'Sara'],
    'ID_ID': [3, 4, 5]
})

# 从df2创建名字到ID的映射字典
id_mapping = df2.set_index('Name_name')['ID_ID'].to_dict()

# 填充df1里的缺失ID:先保留原有的非空ID,空的用映射结果补上
df1['ID'] = df1['ID'].fillna(df1['Name'].map(id_mapping))

# 输出结果
print(df1)

运行后就能得到你想要的结果:

Name   ID
0   Alla    3
1  Peter    4
2   Sara    5
3  Maria  NaN

方法二:用merge()合并后填充

如果你的数据集结构更复杂(比如有多个匹配列),用合并的方法会更灵活。步骤是先把两个数据集按名字合并,再用合并后的列填充缺失值。

import pandas as pd

# 同样先模拟数据集
df1 = pd.DataFrame({
    'Name': ['Alla', 'Peter', 'Sara', 'Maria'],
    'ID': [3, pd.NA, pd.NA, pd.NA]
})

df2 = pd.DataFrame({
    'Name_name': ['Alla', 'Peter', 'Sara'],
    'ID_ID': [3, 4, 5]
})

# 先把df2的列名改成和df1匹配的,方便合并
df2_renamed = df2.rename(columns={'Name_name': 'Name', 'ID_ID': 'ID_from_df2'})

# 左合并两个数据集,保留df1的所有行
merged_df = df1.merge(df2_renamed, on='Name', how='left')

# 用合并后的ID_from_df2填充df1的缺失ID
df1['ID'] = df1['ID'].combine_first(merged_df['ID_from_df2'])

# 输出结果
print(df1)

这个方法的好处是能保留更多中间信息,方便后续的检查或处理。

两种方法都能达到你的预期效果,选哪个看你自己的需求啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:02:32