Python pandas如何比对两个DataFrame的id值并合并对应color_value列
实现方案
你要的效果可以通过两种常见的pandas操作实现,以下是完整代码和说明:
方法1:使用merge左连接(最常用)
直接通过pandas的merge方法按id字段左连接两个DataFrame即可,会自动保留df1的全部行,匹配到的id自动填充对应的color_value值。
import pandas as pd # 示例数据 df_1 = pd.DataFrame({'a': [1, 2, 3, 4, 5], 'id': ['001', '002', '001', '004', '003']}) df_2 = pd.DataFrame({'id': ['001', '002', '003', '004'], 'color_value': ['blue', 'red', 'yellow', 'orange']}) # 核心操作:左连接匹配 df_1 = df_1.merge(df_2, on='id', how='left') # 输出结果 print(df_1)
运行输出结果和你需要的最终效果完全一致。
方法2:使用map映射(大数据量下效率更高)
如果df2的id是唯一值(作为查找表通常满足这个条件),可以先把df2转为id到color_value的映射字典,再给df1映射赋值,性能比merge更好。
import pandas as pd # 示例数据 df_1 = pd.DataFrame({'a': [1, 2, 3, 4, 5], 'id': ['001', '002', '001', '004', '003']}) df_2 = pd.DataFrame({'id': ['001', '002', '003', '004'], 'color_value': ['blue', 'red', 'yellow', 'orange']}) # 核心操作:生成映射字典后赋值 id_color_map = df_2.set_index('id')['color_value'].to_dict() df_1['color_value'] = df_1['id'].map(id_color_map) # 输出结果 print(df_1)
补充说明:如果存在df1的id在df2中没有匹配项的情况,两种方法生成的color_value字段对应位置会自动填充为
NaN,符合查找逻辑的预期。
内容的提问来源于stack exchange,提问作者MAtennis9
相关产品推荐
相关产品推荐

