如何找到一个二维数组中与另一个二维数组中相同行的位置?

4
import numpy as np

# Create two sample dataframes
df1 = np.array([[0.000000,0.000000,0.000000],
[0.090000,0.000000,0.000000],
[0.190000,0.000000,0.000000],
[0.280000,0.000000,0.000000],
[0.380000,0.000000,0.000000],
[0.470000,0.000000,0.000000],
[0.570000,0.000000,0.000000],
[0.660000,0.000000,0.000000],
[0.760000,0.000000,0.000000],
[0.850000,0.000000,0.000000]])

df2 = np.array([[0.470000,0.000000,0.000000],
[0.570000,0.000000,0.000000],
[0.660000,0.000000,0.000000],
[0.760000,0.000000,0.000000],
[0.850000,0.000000,0.000000]
])

df3 = np.where(np.isclose(df1[:, np.newaxis], df2))[0]

print(df3)

我想找到df2在df1中的位置,正确答案应该是[5, 6, 7, 8, 9],但Python输出的结果是[0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9],这个结果没有意义。我该如何修改代码才能正确找到df2在df1中的位置?
2个回答

1
如果你只想匹配非零值,你可以将它们移除。
np.where(np.isclose(np.where(df1!=0, df1, np.nan)[:, None], df2))[0]

输出:

array([5, 6, 7, 8, 9])

如果你想要完全匹配,包括零(逐行匹配),你可以使用以下方法:
out = np.where(np.isclose(df1[:, None], df2).all(2))[0]

输出:array([5, 6, 7, 8, 9])

1
一种完全匹配的方法:
np.argwhere(np.isin(df1, df2).all(axis=1))

array([[0],[5],[6],[7],[8],[9]], dtype=int64)

isin函数将数组扁平化,因此您可以对df2进行洗牌并获得相同的结果。不确定这是否是预期的逻辑。 - undefined
嗯...你是对的,mozway。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接