熊猫的左合并:结果表有更多行,防止重复

时间:2018-08-29 11:16:49

标签: python pandas merge

我有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 :(得分: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)

这将确保resdf1的行数相同。