我有 2 个数据框。 df1 有 39780 行,df2 有 8900454 行
我想要合并的 df1 列:
['邮政编码','门牌号','后缀']
“后缀”列包含一些 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')
然后在合并之前删除右
数据框中的重复项:
res = pd.merge(df1, df2.drop_duplicates(subset=right_cols),
how='left', left_on=left_cols, right_on=right_cols)
这将确保 res
与 df1
具有相同的行数。
关于python - Panda的左合并: resulting table has more rows,防止重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52076172/