pandas merge(how =“inner”)结果比两个数据帧都大

时间:2017-04-13 14:05:54

标签: 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)

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

从每个df中删除了重复项

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

2 个答案:

答案 0 :(得分:3)

考虑两个数据框 holder.nameView.setText("some_text"); holder.imageView.setImgaeResource(R.drawable.image_view); 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 列上merge,则会为每个行组合返回一个数据帧,其中列'A'都等于一行。

'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

答案 1 :(得分:1)

我想将解决方案发布到我自己的问题上,但它完全是技术性的,而不是功能性的,因此@piRSquared是完全正确的。

原来这是一个非常奇怪的问题。在我的conda安装中,我安装了英特尔MKL模块,默认情况下它已打开。据推测,这个模块可以提高numpy,scipy和scikit-learn的速度。一旦我使用CLI命令conda install nomkl禁用它,我的第一个代码就得到了正确的结果。我正在为MKL添加新标签,以防其他人遇到这种奇怪的numpy.merge()行为 谢谢大家。