亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python pandas - 加入替換

Python pandas - 加入替換

智慧大石 2021-07-30 02:03:05
我正在嘗試使用數據幀 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


查看完整回答
反對 回復 2021-08-03
  • 1 回答
  • 0 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號