You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas合并DataFrame后行数多于原数据,求问题原因

合并DataFrame行数异常的原因与排查方案

核心原因:"Filename"列存在重复值

你遇到的行数膨胀,以及各种连接方式(left/inner/outer/right)结果行数一致的情况,本质是两个DataFrame的"Filename"列存在重复条目,导致合并时产生笛卡尔积:

  • 如果A中某个Filename出现N次,B中同一个Filename出现M次,合并后该Filename对应的行数会变成N×M,而非原有的N行。
  • 所有连接方式行数一致,说明A中所有Filename在B中都有匹配项,且重复匹配的情况覆盖了整个数据集。

验证步骤

1. 检查A中"Filename"的重复情况

# 统计A中重复出现的Filename及其次数
a_dup_counts = A['Filename'].value_counts()
a_duplicates = a_dup_counts[a_dup_counts > 1]
print("A中重复的Filename数量:", len(a_duplicates))
print("A中重复Filename的出现次数:\n", a_duplicates)

2. 检查B中对应A的Filename的重复情况

# 筛选出B中与A重叠的Filename,再统计重复
b_matched = B[B['Filename'].isin(A['Filename'])]
b_dup_counts = b_matched['Filename'].value_counts()
b_duplicates = b_dup_counts[b_dup_counts > 1]
print("B中与A重叠的重复Filename数量:", len(b_duplicates))
print("B中重复Filename的出现次数:\n", b_duplicates)

3. 定位具体导致行数增加的记录

# 给A添加临时行号,合并后按行号分组统计行数
A['temp_row_id'] = range(len(A))
merged_with_id = A.merge(B, on='Filename', how='left')
row_expand_counts = merged_with_id.groupby('temp_row_id').size()
# 找出合并后行数翻倍的原A行,对应的Filename就是问题来源
problematic_rows = row_expand_counts[row_expand_counts > 1].index
problematic_filenames = A.loc[problematic_rows, 'Filename'].unique()
print("导致行数增加的Filename:\n", problematic_filenames)

解决办法

根据业务需求选择对应方案:

  • 如果B中同一Filename的多条记录是重复垃圾数据:先对B去重再合并
    # keep='first'保留第一条,'last'保留最后一条
    B_dedup = B.drop_duplicates(subset='Filename', keep='first')
    merged = A.merge(B_dedup, on='Filename', how='left')
    
  • 如果B中同一Filename的多条记录是细分有效数据:先聚合再合并
    # 示例:数值列取均值,字符串列取第一条,可根据业务调整聚合逻辑
    B_agg = B.groupby('Filename').agg({
        '数值列1': 'mean',
        '数值列2': 'sum',
        '分类列': 'first'
    }).reset_index()
    merged = A.merge(B_agg, on='Filename', how='left')
    
  • 如果A中重复的Filename是业务错误:先清理A的重复数据
    A_dedup = A.drop_duplicates(subset='Filename', keep='first')
    merged = A_dedup.merge(B, on='Filename', how='left')
    

内容的提问来源于stack exchange,提问作者Kyle_Stockton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:52:50