python — заменить значения во фрейме данных, используя другой фрейм данных с тем же индексом

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных с отсутствующими значениями для некоторых столбцов:

 a = pd.DataFrame(data = {"name":['bob','sue','dave'],'status':[np.NaN,np.NaN,'A'],'team':['red','blue',np.NaN]},index=[100,101,105])
  

Фрейм данных a

фрейм данных a

У меня есть другой dataframe с тем же индексом, где некоторые из отсутствующих значений были заменены:

 b = pd.DataFrame(data = {"name":['bob','sue','dave'],'status':['I','O','A'],'team':['red','blue',np.NaN]},index=[100,101,105])
  

Фрейм данных b

фрейм данных b

Есть ли способ сопоставить dataframe b с a , чтобы заменить значения для определенных столбцов в a ? Есть много других строк в, a которых нет в b , поэтому я хочу заменить только строки с тем же индексом.

Я пробовал это, но он устанавливает значения в np.NaN :

 a['status'] = a['status'].map(b['status'])
a['team'] = a['team'].map(b['team'])
  

Фрейм данных a после сопоставления

был сопоставлен фрейм данных a после b

Комментарии:

1. a.combine_first(b) ?

Ответ №1:

Это может быть сделано с помощью операции среза. Индекс второго фрейма данных используется для нарезки первого фрейма данных

Затем вы назначаете второй dataframe.

 a.loc[b.index] = b

  

Вывод:

      name status  team
100   bob      I   red
101   sue      O  blue
105  dave      A   NaN
  

Ответ №2:

Вся заслуга @Sushanth

 >>> a.combine_first(b)
     name status  team
100   bob      I   red
101   sue      O  blue
105  dave      A   NaN