基于ID分组匹配两个DataFrame并映射Region字段的高效实现方法
解决方案
你需要的匹配逻辑本质是用ID+Name两个字段作为联合唯一键做关联匹配,不需要手动分组拆分再合并,直接用pandas内置的merge方法即可,该方法是矢量化实现,处理10万条数据效率远高于手动分组操作。
import pandas as pd # 你的原始数据 df = pd.DataFrame({"ID":[111,111,111,222,222,333,333], "Name":['aaa','xxx','yyy','bbb','xxx','ccc','yyy']}) region = pd.DataFrame({"ID":[111,222,333,111,222,111], "Name":['aaa','bbb','yyy','xxx','yyy','yyy'], "Region": ['west','north','east','west','north','south']}) # 可选操作:如果region表存在同ID同Name对应多条Region的情况,先按ID+Name去重 # keep参数可根据需求调整:first保留第一条、last保留最后一条 region_unique = region.drop_duplicates(subset=['ID', 'Name'], keep='last') # 左连接匹配,保留df的所有行,匹配到的补上Region字段 result = pd.merge(df, region_unique, on=['ID', 'Name'], how='left')
运行后得到的result输出如下:
ID Name Region 0 111 aaa west 1 111 xxx west 2 111 yyy south 3 222 bbb north 4 222 xxx NaN 5 333 ccc NaN 6 333 yyy east
该结果完全符合你按ID分组匹配的预期,对于df里存在但region里没有的ID+Name组合,Region字段会返回空值,可后续根据需要填充默认值。
内容的提问来源于stack exchange,提问作者sudden_clarity_clarence
相关产品推荐
相关产品推荐

