.loc поиск/доступ и логическая индексация по условию, логические операции

Доступ.
Ячейка .loc[1, 'col']
Cтолбец .loc[:, 'col']
Несколько столбцов .loc[:, ['col1', 'col2']]
Cтрока .loc[1]
Несколько строк подряд: .loc[3:8]

Логическая индексация по условию.
Строки целиком: df.loc[df.loc[:,'col'] == 'X']
или:
df[df['col'] == 'X']

Только столбец col2 со строками, удовлетворяющими условию в col1:
df[df['col1'] == 'X'] ['col2']

Булев массив как индекс датафрейма:
print(df[df['col1'] == 'smth'])

С другими операторами сравнения:
print(df[df['col1'] < 5])

Сравнение со значением другого столбца:
df[df['col1'] > df['col2']]

Поиск конкретных значений:
df[df['col1'].isin(('smth', 'smth2'))]

Логические операции (вариант записи (б) - исключение, так записанный код работает, например в Pandas):
1. И
a) a and b
б) (a) & (b)
(df['col1']) & (df['col2'] > 5)

2. ИЛИ
а)a or b
б) (a) | (b)
(df['col1']) | (df['col2'] < 5)

3. НЕ
а) a not b
б) (a) ~ (b)
&, | и др, используют и как побитовые операторы, если условие записано без скобок https://data-scientists.ru/node/29

Еще примеры
print(df[(df['col1'] == True ) &~ (df['col2'].isin(('smth', 'smth')))])

Язык и производные:

Команды: