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

Python中重复合并Pandas DataFrame时第三次合并后大量数据丢失问题排查

问题分析与解决方案

让我来帮你拆解下这个数据丢失的问题——核心原因其实是你用的pd.merge()默认是内连接(Inner Join),这会悄悄过滤掉那些没有匹配子节点的行,导致每次合并后数据量越来越少,第三次大量丢失就是因为大部分child_3已经没有后续子节点了。

一、先修复合并逻辑:改用左连接

你的merge_dataset函数里,默认的内连接只会保留左右表在连接键上完全匹配的行。如果某个child_n没有对应的子节点(也就是不在parent_child_longlist的RID列里),这些行就会被直接丢掉。

把函数改成左连接(how='left'),就能保留左表的所有行,没有匹配的子节点用NaN填充,不会丢失数据:

def merge_dataset(df1, list_df, index_1, index_2):
    num_df = pd.DataFrame(list_df, columns=[index_1, index_2])
    # 关键:用左连接替代默认的内连接
    df2 = pd.merge(df1, num_df, on=index_1, how='left')
    return df2

这样再执行第二次、第三次合并时,即使child_2/child_3没有子节点,原来的行都会保留,只是新列会显示NaN,不会出现数据丢失的情况。

二、优化流程:自动循环合并直到无新节点

手动调用10-20次太繁琐了,我们可以写一个循环函数,自动迭代合并,直到没有新的子节点可添加为止:

def recursive_merge(base_df, parent_child_list, start_child_col='child_1'):
    current_df = base_df.copy()
    current_col = start_child_col
    
    while True:
        # 生成下一个子节点列名,比如child_1→child_2
        next_col_num = int(current_col.split("_")[-1]) + 1
        next_col = f'child_{next_col_num}'
        
        # 左连接合并
        merged_df = pd.merge(
            current_df,
            pd.DataFrame(parent_child_list, columns=[current_col, next_col]),
            on=current_col,
            how='left'
        )
        
        # 检查新列是否全为空,如果是,说明没有更多子节点了,停止循环
        if merged_df[next_col].isna().all():
            break
        
        current_df = merged_df
        current_col = next_col
    
    return current_df

# 调用示例:传入你的初始df和父子关系列表
final_result = recursive_merge(df, parent_child_longlist, start_child_col='child_1')

这个函数会自动帮你生成child_1到child_n的所有列,直到所有可能的父子关联都被映射完成,不用再手动一次次调用合并函数。

三、额外排查点

  • 确认parent_child_longlist里的父子关系没有格式问题:比如RID和Child_RID的大小写、空格、拼写错误,这些都会导致匹配失败,间接造成数据丢失。
  • 如果你的父子关系是从第一个DataFrame(RID-Child_RID表)来的,建议直接转成列表,避免重复构造:
    # 假设第一个父子关联表叫parent_child_df
    parent_child_longlist = parent_child_df[['RID', 'Child_RID']].values.tolist()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:04:08