Как найти индекс последнего вхождения, соответствующий определенному значению в серии Панд? - PullRequest
0 голосов
/ 13 сентября 2018

Как мне найти последний индекс вхождения для определенного значения в серии Панд?

Например, допустим, у меня есть серия, которая выглядит следующим образом:

s = pd.Series([False, False, True, True, False, False])

И я хочу найти последний индекс для значения True (т. Е. Индекс 3), как бы вы поступили?

Ответы [ 4 ]

0 голосов
/ 13 сентября 2018

Вы можете использовать выражение генератора с next и enumerate:

s = pd.Series([False, False, True, True, False, False])

res = len(s) - next(idx for idx, val in enumerate(s[::-1], 1) if val)  # 3

Это будет более эффективно для больших серий со значением True в конце.

0 голосов
/ 13 сентября 2018

Использование last_valid_index:

s = pd.Series([False, False, True, True, False, False])
s.where(s==True).last_valid_index()

Вывод:

3

Использование примера @ user3483203

s = pd.Series(['dog', 'cat', 'fish', 'cat', 'dog', 'horse'], index=[*'abcdef'])
s.where(s=='cat').last_valid_index()

Вывод

'd'
0 голосов
/ 13 сентября 2018

Использование nonzero

s.nonzero()[0][-1]
Out[66]: 3
0 голосов
/ 13 сентября 2018

Вы можете использовать np.argmax в вашей обратной серии, если вы ищете в логическом массиве:

>>> len(s) - np.argmax(s[::-1].values) - 1
3

Если вы ищете другое значение, просто преобразуйте его в логический массив, используя ==

Вот пример поиска последнего вхождения dog:

>>> s = pd.Series(['dog', 'cat', 'fish', 'cat', 'dog', 'horse'])
>>> len(s) - np.argmax(s[::-1].values=='dog') - 1
4

Однако это даст вам числовой индекс. Если ваша серия имеет пользовательский индекс, она не вернет его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...