如何基于另一Pandas DataFrame的匹配值为目标DataFrame新增列?
解决DataFrame按匹配列添加对应列的问题
这里给你两种简单高效的实现方式,都是基于pandas的常用操作:
方式一:左连接合并(最直观)
因为df2里每个Name只出现一次,直接用左连接就能把对应的ColA、ColB匹配到df1里,还能保留df1所有行(包括重复的Name1条目)。
代码示例:
import pandas as pd # 构造示例数据(替换成你自己的真实数据即可) df1 = pd.DataFrame({ 'Name1': ['aaa', 'ccc', 'eee', 'ggg', 'aaa'], 'Name2': ['bbb', 'ddd', 'fff', 'hhh', 'jjj'], 'Col1': [1, 9, 2, 13, 25], 'Col2': [3, 8, 10, 15, 35], 'Col3': [5, 6, 11, 17, 23], 'Col4': [7, 4, 12, 19, 41] }) df2 = pd.DataFrame({ 'Name': ['aaa', 'ggg', 'eee', 'ccc'], 'ColA': [100, 300, 500, 700], 'ColB': [200, 400, 600, 800] }) # 执行左连接,匹配列分别为df1的Name1和df2的Name result = pd.merge(df1, df2, left_on='Name1', right_on='Name', how='left') # 删除合并后多余的Name列 result = result.drop('Name', axis=1) print(result)
方式二:字典映射(轻量化)
如果只是单纯需要添加这两列,用字典映射更简洁,先把df2转成以Name为键的字典,再映射到df1的Name1列上:
import pandas as pd # 构造示例数据 df1 = pd.DataFrame({ 'Name1': ['aaa', 'ccc', 'eee', 'ggg', 'aaa'], 'Name2': ['bbb', 'ddd', 'fff', 'hhh', 'jjj'], 'Col1': [1, 9, 2, 13, 25], 'Col2': [3, 8, 10, 15, 35], 'Col3': [5, 6, 11, 17, 23], 'Col4': [7, 4, 12, 19, 41] }) df2 = pd.DataFrame({ 'Name': ['aaa', 'ggg', 'eee', 'ccc'], 'ColA': [100, 300, 500, 700], 'ColB': [200, 400, 600, 800] }) # 将df2转换为字典格式 col_a_dict = df2.set_index('Name')['ColA'].to_dict() col_b_dict = df2.set_index('Name')['ColB'].to_dict() # 为df1添加新列 df1['ColA'] = df1['Name1'].map(col_a_dict) df1['ColB'] = df1['Name1'].map(col_b_dict) print(df1)
两种方法都能得到你需要的结果:如果后续还有其他合并需求,选第一种;如果只是单纯添加两列,第二种更轻便。
内容的提问来源于stack exchange,提问作者Eduardo
相关产品推荐
相关产品推荐

