我有兩個資料框 df1 和 df2。
np.random.seed(0)
df1= pd.DataFrame({'key': ['A', 'B', 'C', 'D'],'id': ['2', '23', '234', '2345'], '2021': np.random.randn(4)})
df2= pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'id': ['23', '2345', '67', '45'],'2022': np.random.randn(4)})
key id 2021
0 A 2 1.764052
1 B 23 0.400157
2 C 234 0.978738
3 D 2345 2.240893
key id 2022
0 B 23 1.867558
1 D 2345 -0.977278
2 E 67 0.950088
3 F 45 -0.151357
我想擁有唯一的鑰匙。如果已找到密鑰,則只需更新密鑰,否則插入新行。我不確定是否必須使用merge/concat/join。任何人都可以對此提供見解嗎?
注意:我使用了完全外連接,它回傳重復的列。發布問題后編輯了輸入資料框。
謝謝!
uj5u.com熱心網友回復:
我認為您需要從中創建索引key然后加入concat:
df = pd.concat([df1.set_index('key'), df2.set_index('key')], axis=1).reset_index()
print (df)
key 2021 2022
0 A 1.764052 NaN
1 B 0.400157 1.867558
2 C 0.978738 NaN
3 D 2.240893 -0.977278
4 E NaN 0.950088
5 F NaN -0.151357
uj5u.com熱心網友回復:
您可以使用合并功能來做到這一點:
df = df1.merge(df2, on='key', how='outer')
df
key 2021 2022
0 A 1.764052 NaN
1 B 0.400157 1.867558
2 C 0.978738 NaN
3 D 2.240893 -0.977278
4 E NaN 0.950088
5 F NaN -0.151357
uj5u.com熱心網友回復:
鑒于您的描述,它看起來像您想要combine_first的。它將通過按順序替換重復項來合并兩個資料集。
df2.set_index('key'). combine_first(df1.set_index('key')).reset_index()
輸出:
key 2021 2022
0 A 1.764052 NaN
1 B 0.400157 1.867558
2 C 0.978738 NaN
3 D 2.240893 -0.977278
4 E NaN 0.950088
5 F NaN -0.151357
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466664.html
