цикл for для поиска значения в датафрейме и обновления значений рядом с ним - PullRequest
0 голосов
/ 01 июня 2018

Я хочу, чтобы python выполнял обновление значений рядом со значением, найденным в обоих кадрах данных (чем-то похожим на VLOOKUP в MS Excel).Итак, для

import pandas as pd
df1 = pd.DataFrame(data = {'col1':['a', 'b', 'd'], 'col2': [1, 2, 4], 'col3': [2, 3, 4]})
df2 = pd.DataFrame(data = {'col1':['a', 'f', 'c', 'd']})
In [3]: df1
Out[3]: 
        col1    col2    col3
      0  a        1       2
      1  b        2       3
      2  d        4       4

In [4]: df2
Out[4]: 
        col1    
      0  a        
      1  f        
      2  c       
      3  d

Результат должен быть следующим:

In [6]: df3 = *somecode*
        df3
Out[6]: 
        col1    col2    col3
      0  a        1       2
      1  f                
      2  c                
      3  d        4       4

Основная часть заключается в том, что я хочу, чтобы какой-то цикл for выполнял это.

Так, например, python ищет первое значение в col1 в df2, находит его в df1, обновляет соответственно col2 и col3, затем движется вперед.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

попробуйте это,

Простое левое соединение решит вашу проблему,

pd.merge(df2,df1,how='left',on=['col1'])

  col1  col2  col3
0    a   1.0   2.0
1    f   NaN   NaN
2    c   NaN   NaN
3    d   4.0   4.0
0 голосов
/ 01 июня 2018

Первый цикл for в пандах лучше избегать, если существует какое-то векторизованное решение.

Я думаю, merge с левым соединением необходимо, параметр on должен быть опущен, если только col1 одинаково в обоих DataFrame с:

df3 = df2.merge(df1, how='left')
print (df3)
  col1  col2  col3
0    a   1.0   2.0
1    f   NaN   NaN
2    c   NaN   NaN
3    d   4.0   4.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...