Как найти индекс строк по списку значений?
Задача следующая: есть DataFrame, допустим, следующий:
| indx | Book | Author | tax_genre |
|---|---|---|---|
| 0 | Dubrovski | Pushkin | Novel |
| 1 | Vanka | Chehov | Tail |
| 2 | O lubvi | Chehov | Tail |
| 3 | O lubvi | Chehov | Tail |
| 4 | O lubvi | Chehov | Tail |
| 5 | Karamazovi | Dostoevski | Novel |
Имеется список ['O lubvi', 'Chehov', 'Tail']. Необходимо получить по фрейму список с индексами строк, в которых присутствуют все эти значения, т.е. [2, 3, 4].
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
В общем, всё просто. Можно вот прямо сравнивать всем списком:
print(list(df.loc[(df[['Book', 'Author', 'tax genre']] == ['O lubvi', 'Chehov', 'Tail']).all(axis=1)].index))
Вывод:
[2, 3, 4]
Автор решения: MaxU
→ Ссылка
Еще один вариант решения:
search_vals = ['O lubvi', 'Chehov', 'Tail']
qry = " and ".join(f"{f}=='{v}'" for f,v in zip(df.columns, search_vals))
res = df.query(qry).index.to_list()
результат:
In [24]: res
Out[24]: [2, 3, 4]