pandas:2个数据帧之间的数据差异(delta)

时间:2016-02-11 15:56:08

标签: python pandas delta

我有2个非索引数据框,具有完全相同的数据结构(相同的列),为了简单起见,这里是一个例子:

DF1

0       1       2          3    4
JoeK    Joe     Kavanagh   120  joe.kavanagh@nomail.com
BarryD  Barry   Dempsy     11   barry.dempsy@nomail.com
OrlaF   Orla    Farrel     236  ofjk@nomail.com
SethB   Seth    Black      563  sblack@nomail.com
KateW   Kate    White      254  kw12@nomail.com

和第二个:

DF2

0       1       2          3    4
JoeK    Joe     Kavanagh   110  jkavanagh@nomail.com
BarryD  Barry   Dempsy     11   barry.dempsy@nomail.com
JimmyS  Jimmy   Smith      250  j.Smith@nomail.com
SethB   Seth    Blake      563  sblack@nomail.com

我想得到一个结果数据帧,表示df1中df2中没有的行:

0       1       2          3    4
JoeK    Joe     Kavanagh   120  joe.kavanagh@nomail.com
OrlaF   Orla    Farrel     236  ofjk@nomail.com
SethB   Seth    Black      563  sblack@nomail.com
KateW   Kate    White      254  kw12@nomail.com

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

IIUC看起来你只想尝试匹配cols 0,1,2,3,你可以执行左merge并传递参数indicator=True如果你使用的是最新版本大熊猫然后过滤df:

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  joe.kavanagh@nomail.com  NaN  left_only
2  OrlaF  Orla    Farrel  236          ofjk@nomail.com  NaN  left_only
3  SethB  Seth     Black  563        sblack@nomail.com  NaN  left_only
4  KateW  Kate     White  254          kw12@nomail.com  NaN  left_only