在pandas中比较两个数据框的行

3
我有两个数据框,第一个是我目前在数据库中拥有的数据,第二个是可能已更改字段的文件: namecnpjcreate_date 基于此,我需要创建第三个数据框,只包含经历了某种变化的行,就像预期输出的示例一样。
关键是进行比较的要素: id_account 数据框1:
id_account 名称 CNPJ 创建日期
10 代理商 Criss 10203040 2022-05-30
20 代理商 Angel 11213141 2022-05-30
30 超市 Mario Bros 12223242 2022-05-30
40 代理商 Mister M 13233343 2022-05-30
50 超市 Pokemon 14243454 2022-05-30
60 梦想超市 15253580 2022-05-30
数据框2:
id_account name cnpj create_date
10 超市Carol 80502030 2022-05-30
40 神奇超市 60304050 2022-05-30
60 梦之超市 90804050 2022-05-30

我该怎么做?我已经找了几种方法,但是索引让我感到困惑。

2个回答

3

如果数据具有相同的列,但行数不同,则可以采用以下解决方案:

res = (pd.concat([df1,df2])
       .drop_duplicates(keep=False)
       .drop_duplicates(subset='id_account', keep='last')
      )

输出:

   id_account                   name      cnpj create_date
0          10      Supermarket Carol  80502030  2022-05-30
3          40    Supermarket Magical  60304050  2022-05-30
5          60  Supermarket of Dreams  90804050  2022-05-30

2
如果您的两个数据框具有相同的列和相同数量的行,则可以将它们进行比较,并使用 any(axis=1) 查找任何列发生更改的行:
new_df = df2[(df1 != df2).any(axis=1)]

输出:

>>> new_df
   id_account                   name      cnpj create_date
0          10      Supermarket Carol  80502030  2022-05-30
3          40    Supermarket Magical  60304050  2022-05-30
5          60  Supermarket of Dreams  90804050  2022-05-30

1
在这种情况下,索引可能不同,这会成为一个问题吗? - Caroline Leite
@Caroline,id_account 是你的索引吗? - user17242583
可能存在行数不一致的情况 @richardec - Caroline Leite
你可以删除布尔检查的索引 @CarolineLeite 感谢richardec,你非常友善! - Umar.H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接