我试图在具有相同列但行数不同的两个 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 中找到相同行的交集。这意味着如果一行出现在 df1
和 df2
中,它必须转到 df3
在上一步中,我使用 pd.drop_duplicates()
在标题“问题 5”之后使用代码链接到 jupyter notebook https://github.com/kuatroka/udacity_deep_learning/blob/master/1_notmnist-Copy1.ipynb
最佳答案
考虑两个数据帧 df1
和 df2
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/