Панды: Обновление нескольких столбцов в кадре данных на основе значений из другого кадра данных - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть два кадра данных разных размеров.Мне нужно обновить msg_count в df1 с df2, только если значение столбца [UserId, Month] из df1 и df2 соответствует

Мои данные выглядят следующим образом:

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_count с df1 со значением msg_count с df2, только если UserId и Month равны в обоих фреймах данных

1 Ответ

0 голосов
/ 16 февраля 2019

Звучит так, как будто вы хотите merge:

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

Возможно, вы захотите установить как 'inner', 'outer' и т. Д ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...