pandas как вывести номера всех строк таблицы, в которых содержится заданное значение?

Есть таблица с неструктурированными данными. Нужно вывести номера всех строк, которые содержат значения "male". При попытке использовать get_loc выдает ошибку

1 2 3 4
0 Maria female Cors 34
1 18 Sally female Max
2 Tramp 26 Alex male
3 male Rob Smith
4 Max 30 male
import pandas as pd
df = pd.DataFrame(
    {
        "1": ["Maria", 18, "Tramp", "male", "Max"],
        "2": ["female", "Sally", 26, "Rob", 30],
        "3": ["Cors", "female", "Alex", "Smith", "male"],
        "4": [34, "Max", "male", None, None],
    }
)
index = df.index.get_loc('male')

print(index)

Ответы (1 шт):

Автор решения: CrazyElf

Ну, примерно так:

print(df.loc[(df == 'male').any(axis=1)].index.values)

Вывод:

[2 3 4]

Порядок действий:

  • df == 'male' - определяем, в каких ячейках есть такие значения
  • .any(axis=1) - определяем, в каких строках есть хотя бы одно выполненное условие
  • df.loc[...] - выбираем из датафрейма только такие строки с выполненным условием
  • .index.values - берём индекс, представляем его в виде массива чисел

А то, что вы пытались использовать df.index.get_loc('male') - это поиск в индексе датафрейма. А в индексе у вас числовые значения от 0 до 4, там нет никакого male.

→ Ссылка