Как найти индекс строк по списку значений?

Задача следующая: есть 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]
→ Ссылка