选择具有特定值的列

Posted

技术标签:

【中文标题】选择具有特定值的列【英文标题】:Choosing a column which has a certain value 【发布时间】:2022-01-17 08:15:48 【问题描述】:

我有一个如下的 numpy 数组

all = [[0 0 0],[0 0 1],[0 0 2], ... , [0 0 12]]

我试图只显示具有第三个值 12 的数组。在本例中为 [0 0 12]。当我执行我的代码时,我得到以下输出

[[0 0 0],[0 0 0],[0 0 12]] 

我不知道为什么我得到那些 0 数组。我的代码如下。

for i in all:
  if i[2]==12:
    print(all[i]) ```

【问题讨论】:

不要将变量命名为 all,因为它会影响内置的 all() 函数。 【参考方案1】:

您可以选择与您的条件相对应的所有数组值。

import numpy as np

arr = np.array([[0, 0, 0],
                [0, 0, 1],
                [0, 0, 2],
                [0, 0, 10],
                [0, 0, 11],
                [0, 0, 12]])

print(arr[arr[:,2]==12])

输出

[[ 0  0 12]]

【讨论】:

【参考方案2】:

你可以使用布尔掩码:

当你打印你的数组时,你会得到:

print(arr)
array([[ 0,  0,  0],
       [ 0,  0,  1],
       [ 0,  0,  2],
       [ 0,  0, 12]])

第三行是:

array([[ 0],
       [ 1],
       [ 2],
       [12]])

现在,您可以创建一个布尔掩码:

arr[:,2]==12

计算结果为

array([False, False, False,  True])

这意味着第 1-3 行没有 12 作为第三个元素,但第 4 行有。

所以你在arr上使用这个掩码:

arr[arr[:,2]==12]

输出:

array([[ 0,  0, 12]])

【讨论】:

【参考方案3】:

试试这个(我确信有一种最有效的方法而不是 for 循环,请查看 numpy 的文档或在 *** 中的此处):

import numpy as np
# turn list of lists into a numpy array
all = np.array([[0,0,0],[0,0,0],[0,0,12]])

# use enumerate if you want so you can have the index
for i,ar in enumerate(all.tolist()):
  # look for your value
  if ar[2]==12:
      # as you want the rows just do all[i]
      # if you want the column also all[i][3]
      print( all[i] )

【讨论】:

以上是关于选择具有特定值的列的主要内容,如果未能解决你的问题,请参考以下文章

在 PostgreSQL 中选择具有特定列名的列

MySQL Select ID 出现在具有多个特定值的列的不同行上

VBA-如何选择具有值的列单元格

仅选择最多具有 N 个唯一值的列

MySQL选择具有不同值的所有行相同的列

Bigquery:选择具有不在group by子句中的任何值的列