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

pandas: Data difference (delta) between 2 data frames

我有 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 列值已更改,这就是它们在最终结果集中的原因.

非常感谢任何帮助。

IIUC 看起来你只是想匹配 cols 0,1,2,3,你可以执行左 merge 并传递参数 indicator=True 如果你使用pandas 的最新版本,然后过滤 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