如何基于另一个DataFrame的ID匹配新增type列
这问题我平时处理数据时经常碰到,用pandas的两种方法都能轻松解决,给你详细说说:
方案1:用merge方法(直观易理解)
merge是pandas专门用来做数据关联的工具,特别适合这种按ID匹配列的场景:
# 先从df1里提取我们需要的ID和type列,避免合并后引入多余的列 df1_type_map = df1[['ID', 'type']] # 按ID做左合并,确保df2的所有行都被保留 df2 = df2.merge(df1_type_map, on='ID', how='left')
为什么这么做?
how='left'参数保证df2里的每一行都不会丢失(哪怕某个ID在df1里不存在,不过你说两个DF的ID是完全对应的,用inner也可以,但left更稳妥)- 合并完成后,df2就会自动新增
type列,并且每个ID对应的type值都匹配好了
方案2:用map方法(更简洁高效)
如果只需要映射type这一列,用map会更简洁,而且数据量大的时候速度更快:
# 把df1转换成「ID: type」的字典格式 id_type_dict = df1.set_index('ID')['type'].to_dict() # 直接给df2新增type列,通过ID映射对应的值 df2['type'] = df2['ID'].map(id_type_dict)
补充说明
你之前尝试的isin思路其实只完成了「判断ID是否存在」的步骤,没办法直接拿到对应的type值。而上面两种方法都是直接做值的映射匹配,刚好能解决你的需求。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

