kua*_*oka 6 python merge numpy duplicates pandas
我试图在两个具有相同列但行数不同的 Pandas DataFrame 中找到重叠的行:
df1.shape
(187399, 784)
df2.shape
(9790, 784)
Run Code Online (Sandbox Code Playgroud)
在之后pd.merge()的操作
common_cols = df1.columns.tolist()
df3 = pd.merge(df1, df2, on=common_cols, how="inner")
Run Code Online (Sandbox Code Playgroud)
我得到的结果比 df1 和 df2 都大
df3.shape
(283979, 784)
Run Code Online (Sandbox Code Playgroud)
这怎么可能,我做错了什么?我有两个 dfs,[0,1,2,3...783]每个 df都有 784 列命名和不同的行数。我只想在这些 dfs 中找到相同行的交集。这意味着,如果df1and 中存在一行df2,则它必须转到df3
在上一步中,我从每个 df 中删除了重复项pd.drop_duplicates()
在标题“问题 5”之后链接到带有代码的 jupyter 笔记本 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
Run Code Online (Sandbox Code Playgroud)
如果我们merge在 column 上'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
Run Code Online (Sandbox Code Playgroud)
回答
对于要合并的相同键,您在两个数据框中都有重复的行。
要解决该问题,您可以(尽管您需要决定这是否适合您)
df1.drop_duplicates(common_cols).merge(df2.drop_duplicates(common_cols))
Run Code Online (Sandbox Code Playgroud)
我想发布我自己问题的解决方案,但它完全是技术性的,而不是功能性的,因此 @piRSquared 是完全正确的。
结果发现这是一个非常奇怪的问题。在我的 conda 安装中,我安装了 Intel MKL 模块,并且默认情况下它是打开的。该模块据说可以提高 numpy、scipy 和 scikit-learn 的速度。一旦我使用 CLI 命令禁用它conda install nomkl,我就从我的第一个代码中得到了正确的结果。我正在为 MKL 添加新标签,以防其他人出现这种奇怪的numpy.merge()行为,谢谢大家。
| 归档时间: |
|
| 查看次数: |
3346 次 |
| 最近记录: |