我正在尝试在两个具有相同列但行数不同的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中找到相同行的交集。这意味着如果df1
和df2
中存在一行,则必须转到df3
在上一步中,我使用pd.drop_duplicates()
在标题“问题5”之后用代码链接到jupyter笔记本 https://github.com/kuatroka/udacity_deep_learning/blob/master/1_notmnist-Copy1.ipynb
答案 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()
行为
谢谢大家。