проверка существования значения в другом фрейме данных

#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