如何在Python中实现满足指定结果的DataFrame非常规合并?
解决方案
可以通过给两个DataFrame添加组内序号,再基于id和序号做外连接来实现需求,这种方法无需后续删除操作,适合处理大规模数据。
步骤说明
- 为每个DataFrame按
id分组,生成组内的连续序号(从0开始),用来区分同一id下的不同行; - 以
id和序号作为连接键,执行外连接(outer join); - 最后移除辅助的序号列即可得到目标结果。
代码实现
import pandas as pd # 构造示例数据 df_a = pd.DataFrame({'id': [1, 2, 3], 'x': [123, 456, 789]}) df_b = pd.DataFrame({'id': [1, 3, 3], 'y': [4, 5, 6]}) # 添加组内序号 df_a['seq'] = df_a.groupby('id').cumcount() df_b['seq'] = df_b.groupby('id').cumcount() # 外连接并移除序号列 result = pd.merge(df_a, df_b, on=['id', 'seq'], how='outer').drop('seq', axis=1) # 查看结果 print(result)
输出结果
id x y 0 1 123.0 4.0 1 2 456.0 NaN 2 3 789.0 5.0 3 3 NaN 6.0
这个方法的核心是用组内序号匹配同一id下的对应行,外连接会自动保留所有行,且仅匹配同序号的行,自然生成需要的空值,完全不需要额外的删除或修正操作,处理大数据量时效率更高。
内容的提问来源于stack exchange,提问作者Maciej
相关产品推荐
相关产品推荐

