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

左连接合并两个Pandas DataFrame未达预期结果求助

问题解决:Pandas Left Join后行数异常增加且大量NaN

问题原因分析

  1. 合并键匹配错误:左表Reason Not Done列存储的是原因代码(如EMFREAS4),右表中对应的代码列是RND_COLUMNS,而非MIREASND(MIREASND是代码对应的说明文本)。你错误地将MIREASND作为匹配键,导致绝大多数行无法匹配,产生大量NaN。
  2. 右表空值引发笛卡尔积:右表存在大量MIREASND为空的行,当用ACCSNM+空值MIREASND作为匹配键时,左表中同一ACCSNM的所有行都会与这些空值行匹配,直接导致行数暴增。

解决方案

1. 修正合并键

将右表的匹配列从MIREASND改为RND_COLUMNS,确保原因代码与对应列匹配:

merged_df = pd.merge(
    ln_sdtm, 
    rnd_melt, 
    left_on=["ACCSNM", "Reason Not Done"], 
    right_on=["ACCSNM", "RND_COLUMNS"],  # 修正为RND_COLUMNS
    how="left", 
    suffixes=(None, '_R')
).sort_values(["ACCSNM", "Row Number"]).reset_index(drop=True)  # drop=True避免保留旧索引

2. 可选:清理右表无效空值行

如果右表中RND_COLUMNS为空的行是无效数据,可先过滤再合并,减少不必要的匹配:

# 过滤右表中RND_COLUMNS非空的行
clean_rnd_melt = rnd_melt[rnd_melt["RND_COLUMNS"].notna()]

# 执行合并
merged_df = pd.merge(
    ln_sdtm, 
    clean_rnd_melt, 
    left_on=["ACCSNM", "Reason Not Done"], 
    right_on=["ACCSNM", "RND_COLUMNS"],
    how="left", 
    suffixes=(None, '_R')
).sort_values(["ACCSNM", "Row Number"]).reset_index(drop=True)

验证结果

修正后,合并后的DataFrame行数应与左表一致(265行),MIREASND列仅在右表无对应代码说明时出现NaN,而非大量空值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:37:26