簡體   English   中英

Pandas:根據另一個數據框中的值更新數據框中的多列

[英]Pandas : Updating multiple column in a dataframe based on values from another dataframe

我有兩個不同尺寸的數據框。 僅當df1df2列值[UserId,Month]匹配時,才需要從df2更新df1中的msg_count

我的數據如下:

df1:
UserID  Month           A       B       C       D       E       F  msg_count

knaas    1/1/2017       0       0       0       0       0       0    0  
knaas    2/1/2017       0       0       0       0       0       0    0
knaas    3/1/2017       0       0       0       0       0       0    0
knaas    4/1/2017       0       0       0       2       0       0    0
knaas    5/1/2017       0       0       0       0       0       0    0
knaas    6/1/2017       0       0       0       0       0       0    0
knaas    7/1/2017       0       0       0       0       0       0    0
knaas    8/1/2017       0       0       0       0       0       0    0
knaas    9/1/2017       0       0       0       0       0       0    0
knaas    10/1/2017      0       0       0       0       0       0    0
knaas    11/1/2017      0       0       0       0       0       0    0
knaas    12/1/2017      0       0       0       0       0       0    0
ArtCort0324 1/1/2017    0       0       0       0       0       0    0 
ArtCort0324 2/1/2017    0       2       0       2       0       0    0 
ArtCort0324 3/1/2017    0       0       0       0       0       0    0 
ArtCort0324 4/1/2017    0       1       1       0       0       0    0
ArtCort0324 5/1/2017    0       0       0       3       0       0    0
ArtCort0324 6/1/2017    0       0       0       0       0       0    9 

df2:
  UserID           Month    msg_count       
  ArtCort0324   1/1/2017    0    
  ArtCort0324   2/1/2017    0    
  ArtCort0324   3/1/2017    0    
  ArtCort0324   4/1/2017    0    
  ArtCort0324   5/1/2017    0    
  ArtCort0324   6/1/2017    9    
  ArtCort0324   7/1/2017    0    
  ArtCort0324   8/1/2017    0    
  ArtCort0324   9/1/2017    0    
  ArtCort0324   10/1/2017   0     
  ArtCort0324   11/1/2017   0    
  ArtCort0324   12/1/2017   0     

我已經嘗試了以下代碼片段。 但是它沒有按預期工作

res = df2.set_index(['UserID', 'Month'])\
     .combine_first(df1.set_index(['UserID', 'Month']))\
     .reset_index()

updated_new = df1.merge(gitter, how='left', on=['UserID', 'Month'], 
suffixes=('', '_new'))
 updated_new['msg_count'] = 
 np.where(pd.notnull(updated_new['msg_count_new']), 
 updated_new['msg_count_new'], updated_new['msg_count'])

我需要以下輸出

UserID  Month           A       B       C       D       E       F  msg_count

knaas   1/1/2017        0       0       0       0       0       0     0    
knaas   2/1/2017        0       0       0       0       0       0     0    
knaas   3/1/2017        0       0       0       0       0       0     0    
knaas   4/1/2017        0       0       0       2       0       0     0    
knaas   5/1/2017        0       0       0       0       0       0     0    
knaas   6/1/2017        0       0       0       0       0       0     0    
knaas   7/1/2017        0       0       0       0       0       0     0    
knaas   8/1/2017        0       0       0       0       0       0     0    
knaas   9/1/2017        0       0       0       0       0       0     0     
knaas   10/1/2017       0       0       0       0       0       0     0    
knaas   11/1/2017       0       0       0       0       0       0     0    
knaas   12/1/2017       0       0       0       0       0       0     0    
ArtCort0324  1/1/2017   0       0       0       0       0       0     0    
ArtCort0324  2/1/2017   1       0       0       0       0       0     0    
ArtCort0324  3/1/2017   0       0       0       0       0       0     50    
ArtCort0324  4/1/2017   0       0       0       0       0       0     0   

我添加了一個默認列msg_countdf1用默認值0。我需要更新msg_countdf1與價值msg_countdf2 ,只有當UserIdMonth在兩種dataframes等於

聽起來您想要merge

df_merge = pd.merge(left=df1, right=df2, on=['UserID', 'Month'], how='left']

您可能需要將方式設置為'inner', 'outer'等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM