如何找到满足特定条件的列表中项目的索引位置? 像想像的那样,我有一个像这样的列表:
myList = [0, 100, 335, 240, 300, 450, 80, 500, 200]
并且条件是找出myList中所有元素的位置,这些元素位于0到300之间(包括两端)。 我期望输出为:
output = [0, 1, 3, 4, 6, 8]
如何在熊猫中做到这一点?
此外,如何找出满足条件的元素子集中最大元素的索引?就像在上述情况下,在满足给定条件的元素中,最大的300个元素及其索引为4。因此,需要检索其索引。
我一直在尝试许多方法,但没有获得理想的结果。请帮助,我是编程界的新手。
答案 0 :(得分:1)
您可以尝试一下,
>>> import pandas as pd
>>> df = pd.DataFrame({'a': [0, 100, 335, 240, 300, 450, 80, 500, 200]})
>>> index = list(df[(df.a >= 0) & (df.a <= 300)].index)
>>> df.loc[index,].idxmax()
a 4
dtype: int64
或使用列表
>>> l = [0, 100, 335, 240, 300, 450, 80, 500, 200]
>>> index = [(i, v) for i, v in enumerate(l) if v >= 0 and v <= 300]
>>> [t[0] for t in index]
[0, 1, 3, 4, 6, 8]
>>> sorted(index, key=lambda x: x[1])[-1][0]
4
正如Grzegorz Skibinski
所说,如果我们使用numpy摆脱许多计算,
>>> import numpy as np
>>> l = [0, 100, 335, 240, 300, 450, 80, 500, 200]
>>> index = np.array([[i, v] for i, v in enumerate(l) if v >= 0 and v <= 300])
>>> index[:,0]
array([0, 1, 3, 4, 6, 8])
>>> index[index.argmax(0)[1]][0]
4
答案 1 :(得分:1)
您可以将numpy
用于此目的:
import numpy as np
myList =np.array( [0, 100, 335, 240, 300, 450, 80, 500, 200])
res=np.where((myList>=0)&(myList<=300))[0]
print(res)
###and to get maximum:
res2=res[myList[res].argmax()]
print(res2)
输出:
[0 1 3 4 6 8]
4
[Program finished]
答案 2 :(得分:0)
这是熊猫中的between
:
myList = [0, 100, 335, 240, 300, 450, 80, 500, 200]
s= pd.Series(myList)
s.index[s.between(0,300)]
输出:
Int64Index([0, 1, 3, 4, 6, 8], dtype='int64')