基于id和time左连接DataFrame后行数多于左表,原因是什么?
左连接后结果行数多于左表的原因分析
你遇到的这种情况,核心原因是右表(df_3)中存在重复的[id, time]组合,或者左表的连接键组合在右表中能匹配到多条记录,具体说明如下:
- 右表有重复的连接键组合:当df_1中的某一行,在df_3里通过[id, time]能找到N条匹配记录时,左连接会把这一行复制N次,分别和右表的N条记录合并,最终总行数就会超过df_1的行数。
- 左表本身存在重复的连接键组合:如果df_1里已经有重复的[id, time]行,再加上右表对应组合也有重复,会进一步放大行数的增加(本质还是匹配时的笛卡尔积效应)。
举个简单例子:
假设df_1只有1行:
id time col1 1 2024-01-01 a
df_3有2行相同的[id, time]:
id time col2 1 2024-01-01 x 1 2024-01-01 y
执行你写的左连接代码后,结果会变成2行:
id time col1 col2 1 2024-01-01 a x 1 2024-01-01 a y
另外补充一点:左连接的预期不是“仅保留df_1的行数”,而是保留df_1的所有行记录,但如果右表有多个匹配项,就会产生行的复制,这是正常的连接逻辑。
内容的提问来源于stack exchange,提问作者weiming
相关产品推荐
相关产品推荐

