如何在满足一定条件的熊猫名单中找到物品的索引位置?

时间:2019-11-13 18:09:39

标签: python-3.x pandas

如何找到满足特定条件的列表中项目的索引位置? 像想像的那样,我有一个像这样的列表:

myList = [0, 100, 335, 240, 300, 450, 80, 500, 200]

并且条件是找出myList中所有元素的位置,这些元素位于0到300之间(包括两端)。 我期望输出为:

output = [0, 1, 3, 4, 6, 8]

如何在熊猫中做到这一点?

此外,如何找出满足条件的元素子集中最大元素的索引?就像在上述情况下,在满足给定条件的元素中,最大的300个元素及其索引为4。因此,需要检索其索引。

我一直在尝试许多方法,但没有获得理想的结果。请帮助,我是编程界的新手。

3 个答案:

答案 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')