2014-10-09 159 views
2

说我要DataFrames,比另一个更长的时间,我想加入一个特定的列,如下面的例子:熊猫:数据帧后过长合并

A = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': [6, 7, 8, 9, 10], 'col3': [11, 12, 13, 14, 15]}) 

B = pd.DataFrame({'col1': [1, 3, 5], 'col2': [16, 17, 18], 'col4': [19, 20, 21]}) 

然后,我加入他们的行列:

pd.merge(A, B, on='col1', how='outer') 

而获得,符合市场预期:

 col1  col2_x col3 col2_y col4 
0  1  6  11  16  19 
1  2  7  12  NaN  NaN 
2  3  8  13  17  20 
3  4  9  14  NaN  NaN 
4  5  10  15  18  21 

5 rows × 5 columns 

不过,我有两个DataFrames,我试图合并,W分别为28,011和15,676行。按照上面的方式合并它们,我期望在df2没有观察结果的那些单元格中返回一个带有28011行和NaN的DataFrame。会发生什么反而是:

len(pd.merge(df1, df2, on='col1', how='outer')) 
    51881 

这怎么可能?我正在合并的列是一个唯一的标识符,并且在Stata中没有问题的情况下执行相同的操作。我在这里错过了什么?

+3

听起来你想怎么'='left''?外连接还将包括df2中的观察值,df1中没有多少。另外,你可以仔细检查'col1'没有重复吗? – chrisb 2014-10-09 17:04:39

回答

2

听起来像你想要一个左连接。

尝试:

pd.merge(df1, df2, left_on='col1',right_on='col1',how='left') 
+0

这就是我认为是好,但是,唉,没有: 'LEN(pd.merge(DF1,DF2,left_on = 'COL1',right_on = 'COL1',如何= '左'))' 给我51881, 'len(pd.merge(df1,df2,left_on ='col1',right_on ='col1',how ='inner'))' 给出46249.似乎没有合并的选项较小的数据帧保存到较大的数据帧中,同时保留较大的数据帧的长度。 – 2014-10-10 09:27:55

+0

我的不好,我合并的列确实包含一些重复的值,所以为了确切识别我需要在两列合并,最后 'pd.merge(df1,df2,on = ['col1', 'col2'],how ='left')' 诀窍! – 2014-10-10 09:44:01