执行左连接与去重后数据行数为何多于原数据集?
左连接后数据集行数增加的原因分析
已知iso_selected.shape为(257, 2),gravity.shape为(4428288, 79),执行左连接代码:
gravity1 = gravity.merge(iso_selected, how="left", left_on = "iso3_o", right_on="iso3").drop_duplicates()
得到的gravity1.shape为(4571136, 81),行数多于原gravity数据集,核心原因如下:
iso_selected的iso3列存在重复值:左连接的逻辑是,原gravity表中每一行,都会匹配iso_selected表中所有iso3等于iso3_o的行。如果iso_selected里某个iso3对应多行数据,那gravity中匹配到该值的行就会被“复制”多份,分别和这些行合并,直接导致总行数膨胀。比如gravity里有1行iso3_o="CHN",iso_selected里iso3="CHN"有2行,合并后这1行就会变成2行。drop_duplicates()没解决问题:你调用了去重方法但行数仍增加,说明合并产生的行并非完全重复——这些新增行是因为iso_selected中同iso3对应的其他字段值不同,导致合并后的行存在差异,drop_duplicates()默认检查所有字段,这类行不会被剔除。
验证方法
先检查iso_selected中iso3列的重复数量:
print(iso_selected['iso3'].duplicated().sum())
如果结果大于0,就坐实了是重复匹配键导致的行数增加。
内容的提问来源于stack exchange,提问作者user19562955
相关产品推荐
相关产品推荐

