如何以Pythonic方式在Pandas中从关联DataFrame添加匹配列?
解决Pandas DataFrame匹配添加列的问题
嘿,作为Pandas新手碰到这种跨表匹配加列的问题太正常啦!刚好你的场景是两列完全匹配,有两种非常Pythonic的方法可以搞定,我给你详细说说:
方法1:用merge()(通用且稳妥)
merge()是Pandas处理表连接的核心方法,适合各种匹配场景,哪怕以后遇到不完全匹配也能用。因为你要把df1的K列加到df2里,我们用左连接就能保证df2的所有行都保留,同时匹配上对应的K值:
import pandas as pd # 执行合并,指定左右表的匹配列,用左连接 merged_df = df2.merge(df1, left_on='B', right_on='Name', how='left') # 如果不想保留重复的Name列,可以删掉它 merged_df = merged_df.drop('Name', axis=1)
参数说明:
left_on='B':左表(df2)用来匹配的列right_on='Name':右表(df1)用来匹配的列how='left':保留左表(df2)的所有行,即使右表没有对应匹配(不过你说完全匹配,用how='inner'也可以,但left更稳妥)
如果你想更高效,合并时可以只取df1里需要的列,避免引入多余数据:
merged_df = df2.merge(df1[['Name', 'K']], left_on='B', right_on='Name', how='left').drop('Name', axis=1)
方法2:用map()(简洁高效,适合完全匹配场景)
因为你的B列和Name列是完全匹配的,用map()会更简洁,本质是先把df1转换成一个「Name→K」的映射字典,再给df2批量赋值:
# 把df1转换成以Name为索引、K为值的Series(相当于映射表) k_mapping = df1.set_index('Name')['K'] # 给df2直接添加K列,通过B列匹配映射 df2['K'] = df2['B'].map(k_mapping)
这种方法代码更短,执行速度也更快,尤其适合这种一对一完全匹配的场景,不会产生额外的列,一步到位。
两种方法都很Pythonic,你可以根据自己的习惯选~如果以后遇到多列匹配、不完全匹配的情况,优先用merge()就对了!
内容的提问来源于stack exchange,提问作者Pietro Speroni
相关产品推荐
相关产品推荐

