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()
我正在尝试找到一种方法来实现以下目标: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()