代码之家  ›  专栏  ›  技术社区  ›  katiex7

Pandas数据帧合并在进行多列相等性检查时无法按预期工作

  •  0
  • katiex7  · 技术社区  · 5 年前

    我试图合并基于两列相等的两个数据帧。

    代码如下:

    >>> df.merge(df1, how='left', left_on=['Name', 'Age'], right_on=['Name', 'Age'], suffixes=('', '_@'))
       Name  Age
    0     1    2
    1     3    4
    2     4    5
    >>> df
       Name  Age
    0     1    2
    1     3    4
    0     4    5
    >>> df1
       Name  Age
    0     5    6
    1     3    4
    0     4    7
    

    我对合并的期望是

       Name  Age  Age_@
    0     1    2    NaN
    1     3    4    4.0
    2     4    5    7.0
    

    为什么pandas认为有三个匹配的行用于合并?

    1 回复  |  直到 5 年前
        1
  •  1
  •   BENY    5 年前

    所以你是说 merge Name 正确的?

    df.merge(df1, how='left', on='Name', suffixes=('', '_@'))
    Out[120]: 
       Name  Age  Age_@
    0     1    2    NaN
    1     3    4    4.0
    2     4    5    7.0
    

    使用 indicator 看看你的产出是多少

    df.merge(df1, how='left', left_on=['Name', 'Age'], right_on=['Name', 'Age'], suffixes=('', '_@'),indicator=True)
    Out[121]: 
       Name  Age     _merge
    0     1    2  left_only
    1     3    4       both
    2     4    5  left_only
    

    自从你 df df1 也一样 columns 合并 指出它们是否在df中共享相同的项(因为您使用 left