Удаление строк из датафрейма с булевой маской

Необходимо удалить строки в которых значения столбца 'b' меньше нуля

num = [[1, 3, 6],
   [5, -6, 18],
   [0, -1, 16],
   [4, 56, 18]]
df = pd.DataFrame(num, columns=['a','b','c'])
df.drop(df[df['b']<0], Axis=0, inplace=True)

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

Автор решения: inquirer
import pandas as pd

num = [[1, 3, 6],
   [5, -6, 18],
   [0, -1, 16],
   [4, 56, 18]]
df = pd.DataFrame(num, columns=['a','b','c'])
df = df.loc[df['b'] >= 0.0]

print(df)

Проверяем на условие df['b'] >= 0.0, тогда копируем. Естественно минусовые не попадут.

→ Ссылка
Автор решения: CrazyElf

Если хотите именно через drop, то можно так:

df.drop(index=df[df['b']<0].index, inplace=True)

Саму маску в drop передать нельзя, но можно сделать удаление по индексу. И старайтесь не использовать устаревший параметр axis, давно есть возможность использовать более понятные варианты параметров index=, columns=.

А так то при операциях по маске лучше использовать df.loc, но нужно инвертировать условие, что можно сделать использовав отрицание через ~, если не хотите думать над логикой условия, чтобы его поменять:

df = df.loc[~df['b']<0]
→ Ссылка