左合并导致比左数据框更大的行

时间:2016-09-06 15:28:17

标签: python pandas merge left-join

我有两个数据帧,df1和df2。 df1的形状是(118093,2),df2是(690,5)

我正在尝试使用以下方法合并数据框:

df3 = df1.merge(df2, on='consId', how='left')

我已经删除了df2中的重复项(如建议here),我知道df1中的consId会重复(尽管整行不重复)。

我期望的行为是生成的df3应该与df1具有相同的行数,但df2的列附加到df1。

我的数据框如下:

df_consId[18:25]
Out[22]: 
           consId  consumption
18  1155696024483    97.203390
19  1155696024483    80.527278
20  1155696024483    78.953125
21  1155699007557   137.419355
22  1155699007557   117.145161
23  1155699007557   101.500000
24  1155699007557    85.883333

df.head()
Out[23]: 
          consId rfrg-age  rfrg-rating rfrg-type rfrg-capc
0  1155696024483    812yr          1.0     1door      150L
1  1155699007557    812yr          1.0     1door      150L
2  1155694005571     48yr          1.0     2door      250L
3  1155691016680      NaN          NaN       NaN       NaN
4  1155697016945     13yr          5.0     1door      150L

我做df3 = df_consId.merge(df, on= 'consId', how = 'left')

尽管合并按预期工作,但df3中还有其他行,尽管df中没有重复项。有什么理由吗?

1 个答案:

答案 0 :(得分:0)

如果左表有重复键,而右表有唯一键,这就是你提到的问题的情况,左连接应该只给出左表中的记录数。

但是,如果左表只有你提到的2列,那么在进行连接之前,最好按键对该表进行分组。