熊猫数据框合并无法通过多个列相等性检查按预期方式工作

时间:2019-05-06 01:54:21

标签: python python-3.x pandas dataframe

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

代码如下:

>>> 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

为什么熊猫认为此合并有所有三个匹配行?

1 个答案:

答案 0 :(得分:1)

所以您是说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

由于您dfdf1具有相同的columns并且所有columns都已用作merge键,所以没有其他{ {1}}指示它们是否在df中共享相同的项目(因为您使用了columns,因此默认值为显示结果中所有剩余的项目)。