Numpy 数组:有效查找匹配索引,但可能会丢失对应值

问题描述 投票:0回答:1

我有一个与这篇文章非常相似的问题。本质上,我从 2 个 2d 数组(可能具有不同的宽度)开始,其中有一堆行,其中最左边的列充当有效索引,我想组合这两个数组(与原始帖子不同,我们可以假设最左边的列是已经按升序排列)

a = np.array([[1,2], [5,0], [6,4]]) 
b = np.array([[1,10], [5,20], [6,30]])

将合并到此

[[1  2 10]
[5  0 20]
[6  4 30]]

与原始端口一样。然而,我想做两件新的事情。首先,我想通过最左边的值来匹配两个数组,删除另一个数组上没有匹配值的任何行。 举个例子,

a = np.array([[1,2],[3,2], [5,0], [6,4]])
b = np.array([[1,10],[6,30], [5,20], [7,80]])

仍然是

[[1  2 10]
[5  0 20]
[6  4 30]]

数组 a 中的 [3,2] 和数组 b 中的 [7,80] 将被忽略。 其次,作为一个单独的函数,我想以类似的方式连接这两个数组,但每当找不到匹配的值时,我想使用 np.nan (或其他一些独特的非数字填充符)创建一个新行

[[1  2      10]
 [3  2      np.nan]
 [5  0      20]
 [6  4      30]
 [7  np.nan 80]]

我有两个程序可以执行这些操作,但它们效率不高,因为它们迭代输入数组的每一行(可能具有不同的宽度),有效地将行按大小写“压缩”在一起。

有没有好的有效方法可以使用内置 numpy 函数来做到这一点?

python arrays numpy merge numpy-ndarray
1个回答
0
投票

这是一个如何使用 进行操作的示例:

import pandas as pd

a = np.array([[1, 2], [3, 2], [5, 0], [6, 4]])
b = np.array([[1, 10], [6, 30], [5, 20], [7, 80]])

out = pd.DataFrame(a).merge(pd.DataFrame(b), on=[0], how="inner").to_numpy()
print(out)

打印:

[[ 1  2 10]
 [ 5  0 20]
 [ 6  4 30]]

对于第二个示例,选择

how="outer"
:

out = pd.DataFrame(a).merge(pd.DataFrame(b), on=[0], how="outer").to_numpy()
print(out)

打印:

[[ 1.  2. 10.]
 [ 3.  2. nan]
 [ 5.  0. 20.]
 [ 6.  4. 30.]
 [ 7. nan 80.]]
© www.soinside.com 2019 - 2024. All rights reserved.