если значение существует в фрейме, добавьте его в список - PullRequest
0 голосов
/ 30 марта 2019

У меня есть два фрейма данных F1 и F2, содержащие оба столбца id1.

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)

Создание моего списка

     l1 =[]
     for id1 in F2['id1']:
        i=0
        for id11 in F1['id1']:
           i = i+1
           length = 4 #number of lines of DF1
           #print(id1)
           if (id1 == id11) & (i<=4): 
                 l1.append(F2['Description'])
           else: l1.append('Null')
      print(l1)

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Редактировать: в связи с изменением вопроса

Надеюсь, я правильно понимаю ваш пересмотренный вопрос.В любом случае, вам нужно оставить слияние F1 и F2 на id1 и продолжить левое слияние с F2 на id2.После этого вы fillna и выбрасываете одну из колонок «Descrition».

Примите ваши F1 и F2 следующим образом:

In [362]: F1
Out[362]:
   id1  id2
0    1    4
1    7    2
2    9    1
3    3    9
4   10    7

In [363]: F2
Out[363]:
  Description  id1  id2
0         One    1    3
1         Two    2    7
2       Three    3    3    

Объедините влево на id1

In [365]: F1_id1 = F1.merge(F2[['Description', 'id1']], on=['id1'], how='left')
 ...:

In [366]: F1_id1
Out[366]:
   id1  id2 Description
0    1    4         One
1    7    2         NaN
2    9    1         NaN
3    3    9       Three
4   10    7         NaN    

Продолжайте влево F1_id1 на id2

In [367]: F1_id2 = F1_id1.merge(F2[['Description', 'id2']], on=['id2'], how='le
 ...: ft')

In [368]: F1_id2
Out[368]:
   id1  id2 Description_x Description_y
0    1    4           One           NaN
1    7    2           NaN           NaN
2    9    1           NaN           NaN
3    3    9         Three           NaN
4   10    7           NaN           Two    

Наконец, fillna и падение Description_y

In [372]: F1_id2['Description_x'] = F1_id2['Description_x'].fillna(F1_id2['Desc
 ...: ription_y'])

In [373]: F1_id2.drop(['Description_y'], 1)
Out[373]:
   id1  id2 Description_x
0    1    4           One
1    7    2           NaN
2    9    1           NaN
3    3    9         Three
4   10    7           Two    
0 голосов
/ 30 марта 2019

Нет необходимости в петле for;используйте merge:

F2.merge(F1, left_on='id1', right_on='id1', how='left')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...