У меня есть 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" строк, которые совпадают несколько раз?
Вы не должны смотреть на группу по нулевым значениям. Во-первых, это не имеет большого смысла с аналитической точки зрения.
Вы можете преобразовать значения 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
.