Слияние слева от Panda: в получившейся таблице больше строк, не допускайте дублирования

1

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

Столбцы df1 я хочу слить: ['postalcode','housenumber', 'suffix'] Столбец '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" строк, которые совпадают несколько раз?

Теги:
pandas
merge

1 ответ

1
Лучший ответ

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

Вы можете преобразовать значения 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню