Pandas内连接结果行数超原数据集最大值?原因咨询
Pandas内连接后观测数超过原数据集最大值的原因
是的,Pandas执行内连接(inner join)时,合并后的观测数完全可能超过两个原数据集的最大观测数,核心原因在于连接键存在重复值时会触发笛卡尔积匹配。
原理说明
内连接的逻辑是:找到两个数据集中连接键值相等的记录,然后将这些记录两两组合。如果连接键在某一个数据集中有重复值,或者两个数据集都有重复值,就会产生“一对多”或“多对多”的匹配:
- 若数据集A中某个连接键值出现
m次,数据集B中同一个键值出现n次,那么这个键值会贡献m*n条匹配后的记录。 - 当多个这样的重复键值存在时,所有键值对应的乘积之和就是最终的总观测数,这个数值完全可能远超任意一个原数据集的行数。
对应你的案例分析
你提到的两个数据集分别有30181537和23483111条观测,内连接后得到112039626条记录,说明连接键v1在两个数据集中都存在大量重复值。比如:
- 假设数据集1中
v1=X出现了1000次,数据集2中v1=X出现了500次,仅这一个键值就会生成500000条记录; - 当大量类似的重复键值累加后,总条数就会轻松超过原数据集的最大行数。
验证方法
你可以通过以下步骤确认这一点:
- 统计数据集1中
v1的重复次数:df1['v1'].value_counts() - 统计数据集2中
v1的重复次数:df2['v1'].value_counts() - 将两个数据集中共同
v1值的出现次数相乘后求和,结果会和内连接后的总观测数一致(排除其他列的干扰)
内容的提问来源于stack exchange,提问作者Lusian
相关产品推荐
相关产品推荐

