2016-02-11 43 views
2

之间我有2个非索引数据帧,具有完全相同的数据结构(同一列),为简单起见在这里是一个例子:大熊猫:数据差(△)2个数据帧

DF1

0  1  2   3 4 
JoeK Joe  Kavanagh 120 [email protected] 
BarryD Barry Dempsy  11 [email protected] 
OrlaF Orla Farrel  236 [email protected] 
SethB Seth Black  563 [email protected] 
KateW Kate White  254 [email protected] 

,第二个:

DF2

0  1  2   3 4 
JoeK Joe  Kavanagh 110 [email protected] 
BarryD Barry Dempsy  11 [email protected] 
JimmyS Jimmy Smith  250 [email protected] 
SethB Seth Blake  563 [email protected] 

我想有一个RESU lting表示DF1不在DF2行dataframes:

0  1  2   3 4 
JoeK Joe  Kavanagh 120 [email protected] 
OrlaF Orla Farrel  236 [email protected] 
SethB Seth Black  563 [email protected] 
KateW Kate White  254 [email protected] 

注意,第一行(Joek,和SethB)在两个dataframes存在,但第3列的用于JoeK值和列的值2的SethB已经改变了,这就是他们进入最终结果集的原因。

任何帮助,非常感谢。

+0

你的结果不应该只是'df1',因为电子邮件不符合第二行吗?或者你的限制只是在第0-3列上匹配? – EdChum

+0

那么斑点,那是一个错字。我现在纠正了它。 –

回答

1

IIUC它看起来像你只是想在第0,1,2,3列上匹配,你可以执行左边的merge,如果你使用的是最新版本的熊猫,然后过滤掉df,你可以通过参数indicator=True

In [197]: 
merged = df1.merge(df2, how='left', on=['0','1','2','3'],indicator=True) 
merged[merged['_merge'] == 'left_only'] 

Out[197]: 
     0  1   2 3      4_x 4_y  _merge 
0 JoeK Joe Kavanagh 120 [email protected] NaN left_only 
2 OrlaF Orla Farrel 236   [email protected] NaN left_only 
3 SethB Seth  Black 563  [email protected] NaN left_only 
4 KateW Kate  White 254   [email protected] NaN left_only 
+0

我想在这里的所有列上匹配。那是一个样本,我拥有60个以上的数据框。所以我会使用on = df1.columns.tolist() –

+0

默认情况下它会匹配所有列,所以在你的情况下,除非你有不同的要求,否则你不需要传递'on'参数值 – EdChum

+0

这应该工作' merged = df1.merge(df2,how ='left',indicator = True)'我想,你也可以upvote – EdChum