基于ID列合并两个DataFrame及merge行数增多问题咨询
数据集合并方案与merge行数异常解释
一、实现目标合并的方法
你需要保留第二个数据集的所有行,并匹配第一个数据集对应ID的附加信息,用R或Python都能直接实现:
R 实现代码
假设小数据集为df_small,大数据集为df_large:
merged_df <- merge(df_large, df_small, by = "id", all.x = TRUE)
by = "id":指定按ID列匹配all.x = TRUE:保留左表(df_large)的所有行,匹配右表(df_small)的对应数据,完全符合你给出的示例结果——第二个数据集的每一行都对应上第一个数据集的name和country,第一个数据集中无匹配的ID(如示例里的id=3)会被自动排除。
Python(pandas)实现代码
import pandas as pd merged_df = pd.merge(df_large, df_small, on="id", how="left")
二、merge(all = FALSE)行数多于原总和的原因
merge(all = FALSE)是R中的内连接,仅保留两个数据集都存在的ID行。行数异常增多的核心原因是:某一方或双方的ID列存在重复值,匹配时会产生笛卡尔积。
举个直观例子:
- 若
df_small里id=2有2行重复:
id name country 2 Mary Portugal 2 Mary Portugal
df_large里id=2有3行重复:
id time 2 11:12 2 06:34 2 07:21
内连接后,id=2的匹配结果会是2×3=6行,这部分行数直接超过了原两个数据集里id=2的行数总和(2+3=5)。如果数据集中存在大量这类重复ID,最终合并后的总行数就会超过两个原数据集的行数总和。
此外,即使单个数据集内ID无重复,但两个数据集的ID重复次数相乘的总和超过原行数总和时,也会出现该现象。
内容的提问来源于stack exchange,提问作者ManjiroSano
相关产品推荐
相关产品推荐

