Условная замена фреймов данных с использованием Pandas

#python #pandas #dataframe #replace #conditional-statements

#python #pandas #фрейм данных #заменить #условные операторы

Вопрос:

Я довольно новичок в Python, и у меня вопрос об условной замене фреймов данных.

У меня есть два фрейма данных, A и B, и я хотел бы обновлять даты в A датами в B всякий раз, когда есть совпадающий идентификатор (nid).

 import pandas as pd
import numpy as np

nid1 = (1, 3, 4, 8)
date1 = ("2010-02-01", "2008-06-05", "2011-03-15", "2009-02-17") 
info1 = ("b", "m", "d", "m")

nid2 = (1, 3)
date2 = ("2010-08-01", "2008-01-01") 
    
dfa = pd.DataFrame(list(zip(nid1, date1, info1)),  columns =['nid', 'date', 'info']) 
dfb = pd.DataFrame(list(zip(nid2, date2)),  columns =['nid', 'date'])
  

Я хотел бы обновлять переменную date в dfa до переменной data в dfb всякий раз, когда есть совпадающие идентификаторы.

Я безуспешно пытался преобразовать A в словарь для замены

 dict_b = dfb.set_index('nid').to_dict()['date']
dfa["date"].replace(dict_b, inplace=True)
  

Или с использованием np.где

 np.where(dfa["nid"].isin(dfb["nid"]), dfb["date"], dfa["date"])
  

Кто-нибудь, пожалуйста, может дать мне подсказку?

Ответ №1:

Вы можете использовать combine_first :

 print (dfb.set_index("nid").combine_first(dfa.set_index("nid")))

           date info
nid                 
1    2010-08-01    b
3    2008-01-01    m
4    2011-03-15    d
8    2009-02-17    m