#python #pandas #list #dataframe #np
#python #pandas #Список #фрейм данных #np
Вопрос:
У меня есть два фрейма данных F1 и F2, содержащих оба столбца id1, id2.
F1 содержит два столбца F1[id1,id2]
.
F2 содержит три столбца [id1, id2,Описание] Я хочу проверить, F2['id1']
существует ли в F1['id1']
ИЛИ F2 [‘id2’] exists in
F1 [‘id2’], затем я должен добавить colmun в F1 с описанием этого id1 или id2 в F2` . Содержимое F1 и F2 находится ЗДЕСЬ. Вывод, который я просматриваю в F1, также здесь Я создал F1 и F2 следующим образом
F1 = {'id1': ['x22', 'x13','NaN','x421'],'id2':['NaN','223','788','NaN']}
F1 = pd.DataFrame(data=F1)
F2 = {'id1': ['x22', 'NaN','NaN','x413','x421'],'id2':['NaN','223','788','NaN','233'],'Description':['California','LA','NY','Havnover','Munich']}
F2 = pd.DataFrame(data=F2)
На самом деле я попробовал несколько решений. Но мне ничего не помогает это сделать.
Помогите, пожалуйста
Комментарии:
1. Вам нужно
df = F1.merge(F2, how='left')
? Илиdf = F1.merge(F2, how='left', on=['id1','id2'])
?2. я хочу из двух фреймов данных F1 и F2. Добавьте столбец в формате F1, заполненный Так, как показано на картинке, приведенной в сообщении.
3. @израэль, это не мой случай!!
4. Можете ли вы создать
F3
с ожидаемым результатом?5. вы понимаете, что я имею в виду.?
Ответ №1:
Используйте:
#if necessary replace string NaN to missing values
F1 = F1.replace('NaN', np.nan)
F2 = F2.replace('NaN', np.nan)
Для каждого столбца удалите дубликаты по DataFrame.drop_duplicates
, отсутствующий valeus по DataFrame.dropna
и создайте индекс по id
столбцу по DataFrame.set_index
:
s1 = F2.drop_duplicates('id1').dropna(subset=['id1']).set_index('id1')['Description']
s2 = F2.drop_duplicates('id2').dropna(subset=['id2']).set_index('id2')['Description']
Затем используйте Series.map
по столбцам из F1
с Series.combine_first
:
F1['Description'] = F1['id1'].map(s1).combine_first(F1['id2'].map(s2))
print (F1)
id1 id2 Description
0 x22 NaN California
1 x13 223 LA
2 NaN 788 NY
3 x421 NaN Munich