Pandas多键合并DataFrame产生冗余行问题求助
解决Pandas合并DataFrame时因重复键产生冗余行的问题
你遇到的问题本质是:当merge使用的module_name+index组合在两个DataFrame中存在重复项时,Pandas会生成笛卡尔积——也就是df1里每个重复键的行,都会和df2里对应重复键的所有行匹配,自然就出现了大量冗余行。
根据你的需求(按探测批次一一对应latency和latency2),有两种针对性的解决方法:
方法1:直接按行拼接(适用于行顺序严格对应)
如果df1和df2的行是严格按探测顺序排列的(比如第i行都是同一批次的结果),完全不需要用merge,直接按列拼接即可:
# 去掉df2中重复的module_name和index列,避免拼接后重复 df3 = pd.concat([df1, df2.drop(['module_name', 'index'], axis=1)], axis=1)
方法2:添加组内序号后合并(适用于行顺序可能不一致,但同组内顺序对应)
如果两个DataFrame的行顺序不严格一致,但每个(module_name, index)组合下的行是按探测顺序排列的,可以给每个组合添加组内计数,用这个唯一标识来合并:
# 给每个分组添加探测序号(从0开始计数) df1['probe_num'] = df1.groupby(['module_name', 'index']).cumcount() df2['probe_num'] = df2.groupby(['module_name', 'index']).cumcount() # 用三个键合并,确保同组同序号的行匹配 df3 = pd.merge(df1, df2, on=['module_name', 'index', 'probe_num']) # 可选:删除临时添加的probe_num列 df3 = df3.drop('probe_num', axis=1)
这样处理后,每个(module_name, index, probe_num)组合都是唯一的,合并时只会匹配对应批次的行,不会产生冗余。
内容的提问来源于stack exchange,提问作者mangosrk
相关产品推荐
相关产品推荐

