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