Pandas:两个数据帧之间的变化

Pandas: Change between two dataframes

我正在尝试找到一种方法来实现以下目标:df1 和 df2 是 2 个示例数据帧,我需要找出它们之间的区别。它们具有相同的列,但行数据可以根据添加的新名称、删除的旧名称或更改现有集合的数据而更改。

df1:

  Col1 Col2  Col3 Col4    Col5
0     1  ABC    94  xxx   apple
1     1  DEF    24  xxx   apple
2     2  ABC    40  yyy  banana
3     3  ABC    74  zzz    pear
4     3  DEF    43  zzz    pear

df2:

   Col1 Col2  Col3 Col4       Col5
0     1  ABC    71  xxx      apple
1     2  PQR    65  yyy     banana
2     3  ABC    86  zzz       pear
3     3  DEF    53  zzz       pear
4     4  PQR    26  mmm  pineapple

输出:

   Col1 Col2  Col3 Col4       Col5
0     1  ABC   -23  xxx      apple
1     1  DEF   -24  xxx      apple
2     2  ABC   -40  yyy     banana
3     2  PQR    65  yyy     banana
4     3  ABC    12  zzz       pear
5     3  DEF    10  zzz       pear
6     4  PQR    26  mmm  pineapple

我已经尝试了 this 和它提到的 Whosebug 链接,但我需要更改仅适用于特定列并使用新键(在我的示例中为 Col1)追加新行

感谢vm的观看!

如果标识符是C1、C2、C4、C5列,可以设置为索引,使用.sub:

idx = ['Col1', 'Col2', 'Col4', 'Col5']

df2.set_index(idx).sub(df1.set_index(idx), fill_value=0)
Out[16]: 
                          Col3
Col1 Col2 Col4 Col5           
1    ABC  xxx  apple     -23.0
     DEF  xxx  apple     -24.0
2    ABC  yyy  banana    -40.0
     PQR  yyy  banana     65.0
3    ABC  zzz  pear       12.0
     DEF  zzz  pear       10.0
4    PQR  mmm  pineapple  26.0

你也可以在最后调用reset_index:

df2.set_index(idx).sub(df1.set_index(idx), fill_value=0).reset_index()
Out[17]: 
   Col1 Col2 Col4       Col5  Col3
0     1  ABC  xxx      apple -23.0
1     1  DEF  xxx      apple -24.0
2     2  ABC  yyy     banana -40.0
3     2  PQR  yyy     banana  65.0
4     3  ABC  zzz       pear  12.0
5     3  DEF  zzz       pear  10.0
6     4  PQR  mmm  pineapple  26.0

据我了解,您正在对 Col3 执行 df2-df1,您可以试试

df2.set_index(['Col1', 'Col2', 'Col4', 'Col5']).sub(df1.set_index(['Col1', 'Col2', 'Col4', 'Col5']), fill_value=0).reset_index()