如何在两个DataFrame间实现Key匹配的一对一员工关联并去重
解决方案
要实现DF2员工不重复匹配的一对一绑定,核心是给每个key分组内的记录分配唯一匹配序号,避免普通merge产生的笛卡尔积重复。具体步骤如下:
- 给两个DataFrame的
key分组添加组内自增序号 - 以
key+序号为关联键做左连接,实现一对一匹配 - 整理结果列名
代码实现
假设你的两个DataFrame名为df1(A组)和df2(B组):
# 为df1的每个key分组添加匹配序号 df1['match_idx'] = df1.groupby('key').cumcount() # 为df2的每个key分组添加匹配序号 df2['match_idx'] = df2.groupby('key').cumcount() # 按key和匹配序号进行左连接,确保一对一匹配 matched_df = df1.merge(df2, on=['key', 'match_idx'], how='left') # 整理目标列并修改列名 result = matched_df[['employee_id_x', 'key', 'employee_id_y']].rename( columns={ 'employee_id_x': 'employee_id_df1', 'employee_id_y': 'employee_id_df2' } ) # 可选:过滤未匹配到的行(根据需求决定是否保留) result = result.dropna(subset=['employee_id_df2'])
原理说明
groupby('key').cumcount()会为每个key分组内的行从0开始生成连续序号,这样DF1中某key下的第n条记录,只会匹配DF2中同key下的第n条记录,彻底避免DF2员工被重复匹配的问题,最终得到你期望的一对一匹配结果。
内容的提问来源于stack exchange,提问作者gfchqz
相关产品推荐
相关产品推荐

