根据多列的条件选择行

时间:2015-07-12 20:48:30

标签: python arrays numpy

我有一个数组,我希望使用NumPy选择我在Python中不同列上的某些条件的行。例如,考虑这个数组:

test_array = numpy.array(([1,2,3,5],[4,5,6,7],[7,8,9,4]))

现在我想要第1列为1且第4列为5的所有行。 所以输出应该是[1,2,3,5],在这种情况下只有1行。

4 个答案:

答案 0 :(得分:1)

[list(x) for x in test_array if x[0]==1 and x[3]==5]

这为您提供了所需的输出:

[[1, 2, 3, 5]]

对于像这样的数组

test_array=numpy.array(([1,2,3,5],[4,5,6,7],[7,8,9,4],[1,98,76,5]))
然后你会获得

[[1, 2, 3, 5], [1, 98, 76, 5]]

假设您调用结果res,您可以轻松访问结果。例如res[1]将为[1, 98, 76, 5]

如果 - 无论出于何种原因 - 你想获得1和5之间的两个数字你可以使用

[sl[1:3] for sl in res]

会给你

[[2, 3], [98, 76]]

那是你在找什么?

答案 1 :(得分:0)

您可以使用以下方法:

>>> test_array[np.where(np.all(test_array[:,[0,3]]==[1,5],axis=1))]
array([[1, 2, 3, 5]])

答案 2 :(得分:0)

布尔索引/屏蔽可以很好地完成工作

In [498]: test_array=np.array(([1,2,3,5],[4,5,6,7],[7,8,9,4]))

In [499]: I = (test_array[:,0]==1) & (test_array[:,3]==5)

In [500]: I
Out[500]: array([ True, False, False], dtype=bool)

In [501]: test_array[I,:]
Out[501]: array([[1, 2, 3, 5]])

在计算I时,请自由使用(),以便==测试优先于&Kasra测试也可以:I = np.all(test_array[:,[0,3]]==[1,5],axis=1)

答案 3 :(得分:0)

如果您希望将函数作为行的条件,则可以执行以下操作:

def filter(row):
    if row[0]==1 and row[3]==5:
        return True
    return False

out_array = test_array[numpy.array([filter(row) for row in test_array])]

numpy.array([filter(row) for row in test_array])为您提供一个布尔数组,对应于您想要的行,以及您不需要的行。