Pandas:根据另一个数据帧中的值更新数据框中的多个列

问题描述 投票:1回答:1

我有两个不同维度的数据帧。只有当df2df1的列值[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_count添加到df1,默认值为0.我需要更新来自msg_countdf1msg_count的值为df2,仅当UserIdMonth在两个数据帧中相等时

python pandas dataframe updating
1个回答
0
投票

听起来你想要一个merge

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

您可能想要设置如何'inner', 'outer'等...

© www.soinside.com 2019 - 2024. All rights reserved.