#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