Python pandas如何将df1的Marks值赋值给df2中同姓名的不同行
Pandas跨表匹配填充值实现方案
方法1:字典映射*(推荐,执行效率高,完全保留原df2行顺序)*
将df1转为姓名-分数的映射字典,直接给df2的Marks列赋值即可:
import pandas as pd # 你已有的数据初始化代码 df1 = pd.DataFrame({'Name': ['rumul', 'rahul', 'ravi', 'imran'], 'Marks': [5, 20, 8, 12]}) df2 = pd.DataFrame({'Name': ['rumul', 'rahul', 'rahul', 'ravi', 'imran','ravi', 'ravi','imran','rahul','ravi'], 'Marks': ['','','','','','','','','','']}) # 核心填充代码 name_score_map = df1.set_index('Name')['Marks'].to_dict() df2['Marks'] = df2['Name'].map(name_score_map) # 若df2存在df1中没有的姓名,可指定默认填充值,示例默认填0 # df2['Marks'] = df2['Name'].map(name_score_map).fillna(0)
方法2:左连接实现
如果习惯用表关联逻辑处理,可以用左连接实现,同样保留原df2的行顺序:
# 先删除df2原有空的Marks列,再和df1基于Name字段左连接 df2 = df2.drop('Marks', axis=1).merge(df1, on='Name', how='left')
两种方法最终得到的df2都和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

