Как найти индекс первого элемента в отсортированном Series объекте?
То есть, я сгенерировал один и тот же список s.
import numpy as np
import pandas as pd
r = np.random.RandomState(1)
s = pd.Series(r.uniform(0, 10, 100))
Хочу найти индекс первого элемента в отсортированном s, где значения больше 5. Посчитав сам, ближе к 5 это индекс с номером 67, но как его найти через написания кода?
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
s = s.sort_values().reset_index(drop=True) # см. примечание внизу про индекс
print(s[s > 5][:1])
Вывод этого элемента (с индексом):
51 5.148891
dtype: float64
Если просто индекс:
print(s[s > 5].index[0])
Вывод:
51
А индекс вам нужен уже в отсортированной Series по порядку или в исходной до сортировки? Если в исходной, то уберите .reset_index(drop=True), но я не очень понимаю, в чём тогда смысл всего этого. Тогда действительно получится 67.
Автор решения: MaxU
→ Ссылка
Можно воспользоваться функцией numpy.searchsorted():
In [19]: np.searchsorted(s.sort_values(), 5 + 1e-8)
Out[19]: 51
PS + 1e-8 (эпсилон) - нужен для того, чтобы обеспечить строгое сравнение.