我读了类似的主题here。我认为问题不同或至少.index()
无法解决我的问题。
这是R中的一个简单代码及其答案:
x <- c(1:4, 0:5, 11)
x
#[1] 1 2 3 4 0 1 2 3 4 5 11
which(x==2)
# [1] 2 7
min(which(x==2))
# [1] 2
which.min(x)
#[1] 5
简单地返回满足条件的项的索引。
如果x
是Python的输入,我如何获得符合条件x==2
的元素和数组which.min
中最小的元素的indeces。
x = [1,2,3,4,0,1,2,3,4,11]
x=np.array(x)
x[x>2].index()
##'numpy.ndarray' object has no attribute 'index'
答案 0 :(得分:15)
Numpy确实有内置函数
x = [1,2,3,4,0,1,2,3,4,11]
x=np.array(x)
np.where(x == 2)
np.min(np.where(x==2))
np.argmin(x)
np.where(x == 2)
Out[9]: (array([1, 6], dtype=int64),)
np.min(np.where(x==2))
Out[10]: 1
np.argmin(x)
Out[11]: 4
答案 1 :(得分:3)
一个简单的循环可以:
res = []
x = [1,2,3,4,0,1,2,3,4,11]
for i in range(len(x)):
if check_condition(x[i]):
res.append(i)
理解的一个班轮:
res = [i for i, v in enumerate(x) if check_condition(v)]
这里有live example
答案 2 :(得分:1)
您还可以使用heapq
查找最小的索引。然后你可以选择找到多个(例如2个最小的索引)。
import heapq
x = np.array([1,2,3,4,0,1,2,3,4,11])
heapq.nsmallest(2, (range(len(x))), x.take)
返回
[4, 0]
答案 3 :(得分:1)
NumPy for R为您提供了Python中的一系列R功能。
关于你的具体问题:
import numpy as np
x = [1,2,3,4,0,1,2,3,4,11]
arr = np.array(x)
print(arr)
# [ 1 2 3 4 0 1 2 3 4 11]
print(arr.argmin(0)) # R's which.min()
# 4
print((arr==2).nonzero()) # R's which()
# (array([1, 6]),)
答案 4 :(得分:1)
基于python索引和numpy的方法,该方法根据最小值/最大值的索引返回所需列的值
df.iloc[np.argmin(df['column1'].values)]['column2']