首页 > 解决方案 > 从非常大的输入数组中获取参考数组中对应值的数组

问题描述

我有以下数组:

table = np.array([
[1.0, 1.0, 3.0, 5.0],
[1.0, 2.0, 5.0, 3.0],
...
[2.0, 5.0, 2.0, 1.0],
[8.0, 9.0, 7.0, 2.0]])

让我们分别用 ['a', 'b', 'm', 'n'] 来命名不同的列。

“table”是我的参考表,我想提取 'm' 和 'n' 给定的 'a' 和 'b' 包含在我们称为 'my_list' 的列表中。在该列表中,我们允许重复对 (a, b)。

注意:这里的列表可以称为数组(不是python意义上的)

使用 for 循环更容易做到这一点。但是,对于我的问题,我的列表 'my_list' 可以包含超过 100000 对(a,b),因此使用 for 循环对我的工作来说并不是最佳选择。如何在几行(1 到 3 行)中使用 numpy 函数或 pandas 函数?

我想要的一个例子:给定以下列表

my_list = np.array([
[1.0, 2.0],
[1.0, 2.0],
[8.0, 9.0]])

我想得到以下结果:

results = np.array([
[5.0, 3.0],
[5.0, 3.0],
[7.0, 2.0]])

先感谢您

编辑 1:与 for 循环等效

这是 for 循环的等价物(使用 for 循环的最简单方法,没有二分搜索):

result = []
for x in my_list:
    for y in table:
        if (x[0] == y[0]) and (x[1] == y[1]):
            result.append([y[2], y[3]])
        break

print(results)

标签: pythonpandasnumpyfilter

解决方案


使用pandas的一种可能方法是执行内部merge

pd.DataFrame(table).merge(pd.DataFrame(my_list))[[2, 3]].to_numpy()

array([[5., 3.],
       [5., 3.],
       [7., 2.]])

推荐阅读