python - Pandas 合并(如何 ="inner")结果大于两个数据帧

标签 python pandas numpy merge duplicates

我试图在具有相同列但行数不同的两个 pandas DataFrame 中找到重叠的行:

df1.shape
(187399, 784)

df2.shape
(9790, 784)

pd.merge()操作后

common_cols = df1.columns.tolist()
df3 = pd.merge(df1, df2, on=common_cols, how="inner")

我得到的结果比 df1 和 df2 都大

df3.shape
(283979, 784)

这怎么可能,我做错了什么? 我有两个 df,都有 784 列名为 [0,1,2,3...783] 并且每个 df 中的行数不同。我只想在这些 dfs 中找到相同行的交集。这意味着如果一行出现在 df1df2 中,它必须转到 df3 在上一步中,我使用 pd.drop_duplicates()

从每个 df 中删除了重复项

在标题“问题 5”之后使用代码链接到 jupyter notebook https://github.com/kuatroka/udacity_deep_learning/blob/master/1_notmnist-Copy1.ipynb

最佳答案

考虑两个数据帧 df1df2

df1 = pd.DataFrame(dict(A=[1, 1, 1], B=[9, 8, 7]))
df2 = pd.DataFrame(dict(A=[1, 1, 1], C=[6, 5, 4]))


print(df1)
print()
print(df2)

   A  B
0  1  9
1  1  8
2  1  7

   A  C
0  1  6
1  1  5
2  1  4

如果我们在 'A' 列上merge,它将为每个行组合返回一个数据框,其中 'A' 列等于一。

df1.merge(df2)

   A  B  C
0  1  9  6
1  1  9  5
2  1  9  4
3  1  8  6
4  1  8  5
5  1  8  4
6  1  7  6
7  1  7  5
8  1  7  4

回答
对于要合并的相同键,您在两个数据框中都有重复的行。

要解决该问题,您可以(尽管您需要决定这是否适合您)

df1.drop_duplicates(common_cols).merge(df2.drop_duplicates(common_cols))

关于python - Pandas 合并(如何 ="inner")结果大于两个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43394450/

相关文章:

python - 分隔符 pandas 列左侧的条件 strip 值

python - 将 Dataframe 行与 numpy 数组相乘

python - 将包含字符串内列表的数据框列拆分为两列

python - 为 matplotlib tricontourf 设置掩码

python - np.mean() 导致内存不足错误

python - 如何在 Python 代码继续运行时持续闪烁 LED(或其他 while 循环)

python - 如何抓取实时计算的值

python - Django 测试没有获取模型对象

python - 了解 Python 闭包

python - numpy中的局部线性近似