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
我有 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