繁体   English   中英

熊猫:在两个数据框之间切换

[英]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

我已经尝试过了,并尝试了它提到的stackoverflow链接,但是我需要进行更改,使其仅适用于特定的列,并使用新键(在我的示例中为Col1)附加新行

感谢vm看一看!

如果标识符是C1,C2,C4和C5列,则可以将它们设置为index并使用.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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM