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