Слияние слева от Panda: в получившейся таблице больше строк, не допускайте дублирования - PullRequest
0 голосов
/ 29 августа 2018

У меня есть 2 кадра данных. У df1 39780 строк, а у df2 8900454 строк

Столбцы df1, которые я хочу объединить: ['postalcode','housenumber', 'suffix'] Столбец суффикса содержит некоторые номера NAN.

столбцы df2:

['postalcode_right','housenumber_right', 'suffix_right', 'index_right']

(столбец с именем 'index_right' не является индексом этого фрейма данных.)

df2 = pd.merge(df1, df2,  how='left', left_on=['postalcode','housenumber', 'suffix'], right_on = ['postalcode_right','housenumber_right', 'suffix_right'])

Поскольку df1.suffix содержит NAN, некоторые строки справа соответствуют нескольким строкам слева.

Как я могу предотвратить это ИЛИ очистить значения index_right для строк, которые совпадают несколько раз?

1 Ответ

0 голосов
/ 29 августа 2018

Вы не должны искать группы по нулевым значениям. С одной стороны, это не имеет особого смысла с аналитической точки зрения.

Вы можете преобразовать ваши значения NA в строку-заполнитель, например, 'NULL'

left_cols = ['postalcode', 'housenumber', 'suffix']
right_cols = ['postalcode_right', 'housenumber_right', 'suffix_right']]

df1[left_cols] = df1[left_cols].fillna('NULL')
df2[right_cols] = df2[right_cols].fillna('NULL')

Затем добавьте дубликаты в ваш right кадр данных перед объединением:

res = pd.merge(df1, df2.drop_duplicates(subset=right_cols), 
               how='left', left_on=left_cols, right_on=right_cols)

Это обеспечит res таким же количеством строк, что и df1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...