У меня есть два кадра данных, как указано ниже
1-й кадр данных
data_file = pd.DataFrame({'person_id':[1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3],
'event name': ['Second','First','Second','First','Second','First','Second','First','Second','Second','First','Second','First','Second','First','Second','First','First'],
'ob.date': [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan]
})
2-й кадр данных
out_data = pd.DataFrame({'person_id':[1,1,2,2,3,3],'event name':['First','Second','First','Second','First','Second'],
'ob.date': ['23/08/2017','23/08/2017','11/08/2017','31/08/2017','25/08/2017','22/08/2017']})
Первый кадр данных выглядит так, как показано ниже.
Второй кадр данных выглядит так, как показано ниже.
Что я хотел бы сделать, так это сопоставить значения ob.date
из кадра данных out_data
с data_file
на основе person_id
и event name
.
Это то, что я пробовал
s = out_data.set_index(['person_id','event name'])['ob.date']
data_file['ob.date'] = data_file[('person_id','event name')].map(s)
Столкнулся с ошибкой ниже
KeyError: ('person_id', 'имя события')
# But merge works well. Is the below correct?
pd.merge(data_file,out_data, on = ['person_id','event name'],how = 'inner')
Как я могу избежать этого и сопоставить значения даты на основе нескольких ключей и добиться результата, как показано ниже?
out_data
имеет несколько столбцов, таких же, какdata_file
, поэтому он генерирует_y
для всех идентичных столбцов. Вместо этого можно сделать что-то подобное? `pd.merge(data_file,out_data['ob.date,Reading
], on = ['person_id','имя события'], как = 'left')` 20.08.2019[]
, например, изменитьout_data['ob.date,Reading]
наout_data[['ob.date','Reading']]
20.08.2019