如何使用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
相关产品推荐
相关产品推荐

