我有兩個如下所示的資料框:
df1
A B C
5 1 5
4 2 8
2 5 3
df2
A B C D
4 3 4 1
3 5 1 2
1 2 5 4
df1 和 df2 共享相同的列名,除了僅在 df2 中找到的“D”。我想要做的是將 D 添加到 df1 但用“0”填充所有行
換句話說,如果 df2 中存在一列但 df1 中不存在,則將該列添加到 df1 但將該列中的所有值設為 0(如下)
df1
A B C D
5 1 5 0
4 2 8 0
2 5 3 0
我意識到將一個名為“D”的列添加到 df1 會很容易,但這只是一個虛擬示例,實際上我正在處理更大和更多的資料幀。所以,我正在尋找一種方法來使用我可以在回圈中或迭代中實作的代碼
uj5u.com熱心網友回復:
您可以使用 找到缺少的列Index.difference。
然后有很多方法可以將具有靜態值的多個列分配給 DataFrame,所以這里有一個解包字典的方法,其中鍵是列名,該字典的值是您要分配的靜態值。
df1 = df1.assign(**{x: 0 for x in df2.columns.difference(df1.columns)})
A B C D
0 5 1 5 0
1 4 2 8 0
2 2 5 3 0
uj5u.com熱心網友回復:
你可以用DataFrame.add與fill_value:
print(df1.add(df2, fill_value=0))
輸出:
A B C D
0 9 4 9 1.0
1 7 7 9 2.0
2 3 7 8 4.0
注意:此方法也將填充每個資料幀中的現有 nan0。
uj5u.com熱心網友回復:
試試這個:
df3 = df1.add(df2).fillna(0).astype(int)
輸出:
>>> df3
A B C D
0 9 4 9 0
1 7 7 9 0
2 3 7 8 0
uj5u.com熱心網友回復:
您可以reindex使用另一個資料幀中的列:
df1.reindex(df2.columns, axis=1, fill_value=0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387625.html
