【问题标题】:Not getting expected results when I merge 2 pandas dataframes当我合并 2 个 pandas 数据帧时没有得到预期的结果
【发布时间】:2023-02-26 06:36:09
【问题描述】:

我正在尝试通过左连接合并 2 个 pandas 数据框。

仅供参考,我无法正确格式化表格,所以请理解我试过了。

左表(265 行)和更多列: 我期望最终得到 265 行。

Index     ACCSNM   Reason Not Done

260  YA42816-011       IFFREAS29
261  YA42816-011       EMFREAS1
262  YA42816-011       EMFREAS2
263  YA42816-011       EMFREAS3
264  YA42816-011       EMFREAS4

右表(250 行):

Index    ACCSNM    RND_COLUMNS     MIREASND
245  YA42816-011    IFFREAS7             
246  YA42816-011    IFFREAS6             
247  YA42816-011    IFFREAS5             
248  YA42816-011    IFFREAS3             
249  YA42816-011    EMFREAS4  EM Not done

这是我用来合并 df 的代码:

pd.merge(ln_sdtm, rnd_melt, left_on=["ACCSNM", "Reason Not Done"], right_on=["ACCSNM", 
"MIREASND"],  how="left",  suffixes = (None, '_R')).sort_values(["ACCSNM", "Row 
Number"]).reset_index()

我最终在 Reason not done 和 MIREASND 列中得到 774 行和许多 NaN。

非常感谢您的帮助,因为我正处于一个重要的最后期限。

【问题讨论】:

    标签: pandas merge


    【解决方案1】:

    我回答了我自己的问题。我用错了列。

    pd.merge(ln_sdtm, rnd_melt, left_on=["ACCSNM", "Reason Not Done"], right_on= 
    ["ACCSNM", 
    "RND_COLUMN"],  how="left",  suffixes = (None, '_R')).sort_values(["ACCSNM", 
    "Row Number"]).reset_index()
    

    【讨论】:

      【解决方案2】:

      看起来合并会导致意外的重复。如果合并键中有重复值,就会发生这种情况。

      要尝试的一件事是检查合并键上两个数据框中的重复项,并在合并前删除它们。您可以使用 pandas duplicated 方法查找重复项:

      ln_sdtm.duplicated(subset=["ACCSNM", "Reason Not Done"]).any()
      rnd_melt.duplicated(subset=["ACCSNM", "MIREASND"]).any()
      

      如果找到重复项,您可以使用 pandas drop_duplicates 方法删除它们:

      ln_sdtm.drop_duplicates(subset=["ACCSNM", "Reason Not Done"], inplace=True)
      rnd_melt.drop_duplicates(subset=["ACCSNM", "MIREASND"], inplace=True)
      

      然后使用更新后的数据框再次尝试合并。

      【讨论】:

        猜你喜欢
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 2018-05-03
        • 2022-01-24
        • 2021-12-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多