首页 > 解决方案 > 熊猫合并导致数据进入错误的列

问题描述

我有两个数据框:

df1:

        ID CODE   CD1   CD2
0      11526.0   1A    NWZ
1      11527.0   1C    NWZ

df2

        CD_Code   CID_CODE   OC_NME    OC_CDE
0         Mal3     11529     6A        Main Area
1         Mal2     11526     6B        Side Area

我正在尝试将这些数据框合并到df1['ID CODE']和上df2['CID_CODE']。我想将 df1 附加到 df2 并在匹配时输入值。如果没有匹配,NaN 很好。

所以,考虑到这个逻辑,我写了一个合并:

df1_plus_df2 = pd.merge(df2, df1, how="left", left_on=['CID_CODE'], right_on=['ID CODE'])

现在,生成的合并几乎正是我所需要的。

我得到了这些值,但它们正在覆盖现有的列。df1_plus_df2:

        CD_Code   CID_CODE   OC_NME    OC_CDE      ID CODE   CD1   CD2
0         Mal3     11529     6A        Main Area   NaN       NaN   NaN
1         Mal2     11526     11526.0   1A          NaN       NaN   NaN

如果您在 中看到df1_plus_df2[1],则这些值已覆盖前 2 列中的值。我也没有从 df1 得到第三列来结转。

总的来说,这里奇怪的是我不明白为什么要附加列,但是这些值会覆盖现有的 df2 值。

这是我需要的输出我不确定我做错了什么没有得到它:df1_plus_df2:

        CD_Code   CID_CODE   OC_NME    OC_CDE      ID CODE   CD1   CD2
0         Mal3     11529     6A        Main Area   NaN       NaN   NaN
1         Mal2     11526     6B        Side Area   11526.0   1A    NWZ

我真的很感激一些帮助。谢谢!

标签: pythonpandasdataframemerge

解决方案


您要合并的列是什么?CID_CODE并且ID CODE具有相同的值 11526。如果您尝试附加这两个数据帧,它将无法知道如何合并它们,因为没有指定条件。

请更清楚地解释您要合并的内容。

编辑。

我运行你的代码,这就是我所看到的。

df1 = pd.DataFrame({"ID CODE": [11526.0, 11527.0], "CD1" : ["1A", "1C"], "CD2": ["NWZ", "NWZ"]})
df2 = pd.DataFrame({"CD_Code": ["Mal3", "Mal2"], "CID_CODE": [11529, 11526], "OC_NME": ["6A", "6B"], "OC_CDE": ["Main Area", "Side Area"]})

df3 = pd.merge(df2, df1, left_on=['CID_CODE'], right_on=['ID CODE'], how='left')

输出:

    CD_Code CID_CODE    OC_NME      OC_CDE      ID CODE   CD1   CD2
0   Mal3    11529       6A          Main Area   NaN       NaN   NaN
1   Mal2    11526       6B          Side Area   11526.0   1A    NWZ

你在合并之前做其他事情吗?你用的是什么熊猫版本?


推荐阅读