我正在嘗試使用數據幀 df_2 中包含的值更新數據幀 df_1。df_1 ID B val val2 0 1 2 2 1 1 2 31 2 1 11 3 1 11 4 1 1df_2 ID B val val2 0 1 1 3 1 1 3 31 3 3 3我想要的結果在 df_3 中報告如下:df_3 ID B val val2 0 1 1 3 1 1 3 31 2 1 11 3 3 31 4 1 1連接列是 ID 和 B,當 df_2 匹配時,我會替換這些值。關于值,df_2 包含與 df_1 完全相同的列。有兩個問題提到了這個問題:Python pandas join on with overwrite和Python pandas - specific merge/replacement。這些問題提到了我遇到的完全相同的問題,但是當我嘗試報告連接需要很長時間的解決方案時,我有一個巨大的數據集,我個人認為提到的解決方案適用于小塊數據。此外,這些問題都是陳舊的,所以我想知道大熊貓是否有任何消息可以加速這個過程。
1 回答

慕妹3242003
TA貢獻1824條經驗 獲得超6個贊
您需要使用cumcount創建附加鍵,因為 ID 不是唯一的,然后我們concat 使用drop_duplicates
df1['keys']=df1.groupby('ID').cumcount()
df2['keys']=df2.groupby('ID').cumcount()
pd.concat([df1,df2]).drop_duplicates(['ID','keys'],keep='last').drop('keys',1).sort_index()
Out[31]:
ID B val val2
0 0 1 1 3
1 1 1 3 3
2 1 2 1 1
更新
df1.set_index(['ID','B'],inplace=True)
df1.update(df2.set_index(['ID','B']))
df1=df1.reset_index()
df1
Out[258]:
ID B val val2
0 0 1 1.0 3.0
1 1 1 3.0 3.0
2 1 2 1.0 1.0
3 1 3 3.0 3.0
4 1 4 1.0 1.0
添加回答
舉報
0/150
提交
取消