与基于一列的 pandas 中的左外部联接相反,结果记录少于预期
Opposite of left outer join in pandas based on one column results in less records than expected
我有以下两个数据框:
df2
有 2166 条唯一记录。
我正在尝试 return 蓝色区域中的数据,因此我使用了以下技术:
为了获得绿色数据,我简单地执行了一个内连接:
df_common = df1.merge(df2, how='inner' on='SKU')
产生 413 条唯一记录
为了获得蓝色区域,我将绿色数据附加到 df2
:
df2_plus_green = df2.append(df_common, ignore_index = True)
产生 2579 条记录(这是有道理的 (413 + 2166 = 2579)
然后我删除了重复项:
df_blue = df2_plus_green.drop_duplicates(keep=False, subset=['SKU'])
产生 1666 条记录。我原以为它会产生 1753 条记录 (2166 - 413 = 1753)
我已经在一个小得多的数据集上尝试了上述技术,并且它按预期工作。我假设被丢弃的额外 87 条记录不知何故是重复的,但我已经在整个过程中的每一步检查了每个数据帧,并且所有数据帧都由完全独特的记录组成。谁能指出我正确的方向?我确定很明显我遗漏了一些东西。
在合并两个 table 时,使用参数“指标”,它会告诉我们每个数据点是如何连接的。
df_right_only = pd.merge(df1, df2, on = "Common Column", how = "right", indicator = True)
然后我们可以使用LOC只过滤掉从右边唯一拉取的值table.
df_right_only.loc[df_right_only ['_merge'] == "right_only", 'Column that you want']
这种方法称为反连接。
我有以下两个数据框:
df2
有 2166 条唯一记录。
我正在尝试 return 蓝色区域中的数据,因此我使用了以下技术:
为了获得绿色数据,我简单地执行了一个内连接:
df_common = df1.merge(df2, how='inner' on='SKU')
产生 413 条唯一记录
为了获得蓝色区域,我将绿色数据附加到 df2
:
df2_plus_green = df2.append(df_common, ignore_index = True)
产生 2579 条记录(这是有道理的 (413 + 2166 = 2579)
然后我删除了重复项:
df_blue = df2_plus_green.drop_duplicates(keep=False, subset=['SKU'])
产生 1666 条记录。我原以为它会产生 1753 条记录 (2166 - 413 = 1753)
我已经在一个小得多的数据集上尝试了上述技术,并且它按预期工作。我假设被丢弃的额外 87 条记录不知何故是重复的,但我已经在整个过程中的每一步检查了每个数据帧,并且所有数据帧都由完全独特的记录组成。谁能指出我正确的方向?我确定很明显我遗漏了一些东西。
在合并两个 table 时,使用参数“指标”,它会告诉我们每个数据点是如何连接的。
df_right_only = pd.merge(df1, df2, on = "Common Column", how = "right", indicator = True)
然后我们可以使用LOC只过滤掉从右边唯一拉取的值table.
df_right_only.loc[df_right_only ['_merge'] == "right_only", 'Column that you want']
这种方法称为反连接。