【问题标题】:pandas: Data difference (delta) between 2 data framespandas:2个数据帧之间的数据差异(增量)
【发布时间】:2016-02-11 15:56:07
【问题描述】:

我有 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 列的值发生了变化,这就是它们在最终结果集中的原因。

非常感谢任何帮助。

【问题讨论】:

  • 您的结果不应该只是df1,因为第二行的电子邮件不匹配吗?还是您的限制仅匹配 0-3 列?
  • 很好看,这是一个错字。我现在更正了。

标签: python pandas delta


【解决方案1】:

IIUC 看起来你只是想在 cols 0,1,2,3 上进行匹配,如果你使用的是最新版本的 pandas,你可以执行左 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

【讨论】:

  • 我正在尝试匹配这里的所有列。那是一个示例,我拥有的数据框有 60 多列。所以我会使用 on = df1.columns.tolist()
  • 默认情况下它将匹配所有列,因此在您的情况下,除非您有不同的要求,否则您不需要传递 on 参数值
  • 这应该可以merged = df1.merge(df2, how='left', indicator=True) 我想,你也可以投票
猜你喜欢
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多