如何返回第三列最大值第一列的值?

时间:2017-09-19 16:16:56

标签: python arrays numpy

我正在研究我的numpy HW。对于这个问题,我必须找到1999年之后发布的相机中的最大重量(第3列)(第2列),并返回其productID(第1列)。

所以,我的方法是获得

import numpy as np    
data = np.array([[1,2000,143,4546],[2,1999,246,],[3,2008,190,0],[4,2000,100,]])
no_nan = np.nan_to_num(data) # all nan to zeros
new_cameras = no_nan[:, 1]>1999 # get the array of cameras after 1999 (1 column was released day)
heavy = np.nanargmax(new_cameras, axis = 0)

我被困在这里。 如果有人可以提供帮助,我会很棒。

2 个答案:

答案 0 :(得分:2)

鉴于如果在该输入数组中每个列表的元素数量可变,那么我们需要求助于循环理解 -

data[np.nanargmax([d[2] if d[1]>1999 else np.nan for d in data])][0]

示例运行 -

In [66]: data = np.array([[1,2000,143,4546],[2,1999,246,],[3,2008,190,0],[4,2000,100,]])

In [67]: data[np.nanargmax([d[2] if d[1]>1999 else np.nan for d in data])][0]
Out[67]: 3

答案 1 :(得分:1)

使用您的示例并分解为步骤:

no_nan = np.array([[   1, 2000,  143, 4546],
                   [   2, 1999,  246,    0],
                   [   3, 2008,  190,    0],
                   [   4, 2000,  100,    0]])


# Constrict the array to dates > 1999
filtered = no_nan[no_nan[:, 1]>1999]

# Our productIDs from the filtered array
ids = filtered[:, 0]

# The location of the max
loc = filtered[:, 2].argmax()

# The resulting product id
print(ids[loc])
3