如何实现无重复缺失行的DataFrame外连接合并?
高效解决方案
核心思路是为每个分组添加组内序号,将序号与A共同作为合并键,这样只有同分组同序号的行会匹配,超出匹配数量的行自然会填充NaN,避免重复值填充。
实现代码
# 为两个DataFrame添加组内序号 df1['idx'] = df1.groupby('A').cumcount() df2['idx'] = df2.groupby('A').cumcount() # 以A和idx为键做外连接 merged = pd.merge(df1, df2, how='outer', on=['A', 'idx']) # 去掉临时的idx列,调整列顺序(可选,匹配目标结果格式) merged = merged.drop('idx', axis=1)[['A', 'B_x', 'C_x', 'B_y', 'C_y']] print(merged)
输出结果
A B_x C_x B_y C_y 0 10 0.0 2.0 4.0 7.0 1 10 4.0 7.0 NaN NaN 2 20 5.0 8.0 5.0 8.0 3 20 NaN NaN 6.0 9.0 4 30 6.0 9.0 NaN NaN
方案优势
- 无需指定列名:不管df1/df2有多少列,都不需要手动处理重复列,完全通用
- 逻辑简洁高效:利用分组序号精准匹配,避免后续的重复值替换操作,性能更优
- 结果完全符合需求:自动为超出匹配数量的行填充NaN,无需额外调整
内容的提问来源于stack exchange,提问作者Wang
相关产品推荐
相关产品推荐

