Сравнение кадров данных с различными размерами в pandas и создание нового столбца на основе сравнения - PullRequest
0 голосов
/ 23 марта 2020

Я импортирую через pyodb c 2 данных: df1 и df2.

Они большие, и мне нужно их сравнить.

PS: у них нет тот же размер.

Размер 3 столбца. Кадры данных:

Sizes and format of dataframes

Что я хочу сделать:

Если столбцы CODUSU равны, то df2 [situação] = 'K'

Что я сделал, но это слишком медленно:

for i in range(0,len(df2)):
  for k in range(0,len(df1)):
    if df2.loc[i][0] == df1.loc[k][0]:
        df2[i]["Situação"] = "K"

Мне также необходимо:

Если в элементе в df1 [CODUSU], а не в df2 [CODUSU], то df2 [Сыграть] = 'Q'

Если в элементе в df2 [CODUSU], а не в df1 [CODUSU], затем df2 [ситуационный] = 'B'

1 Ответ

1 голос
/ 23 марта 2020

Вы должны выполнить внешнее слияние с кадрами данных, запрашивая переменную индикатора:

resul = df2.merge(df1, how='outer', on='A', suffixes=('', '_y'),indicator=True)

Не забудьте столбец DTDOSE только для строк, идущих только от df1:

resul.loc[resul['indicator'] == 'right_only', 'DTDOSE'] = resul.loc[
                                  resul['indicator'] == 'right_only', 'DTDOSE_y']

Время вычислять новые значения для столбца Situação:

resul.loc[resul['indicator'] == 'both', 'Situação'] = 'K'
resul.loc[resul['indicator'] == 'right_only', 'Situação'] = 'Q'
resul.loc[resul['indicator'] == 'left_only', 'Situação'] = 'B'

И, наконец, избавиться от вспомогательных столбцов:

resul = resul[['CODUSU', 'DTDOSE', 'Situação']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...