Pandas. Фильтрация колонок по всем значениям в ней
Не силен в пандасе, но сделать нужно.
Есть датафрейм с произвольным количеством колонок и строк, в каждой колонке записаны значения от 0 до 10.
Мне нужно оставить только те колонки, в которых ВСЕ значения в ней > 2. То есть если в колонке даже одно значения будет <= 2, то всю колонку нужно отфильтровать. Вот как???
При этом нужно учитывать что количество колонок может быть очень большим, так что желательно избегать прямых именований колонок в коде.
Ответы (2 шт):
Вот код, который удалит все столбцы, в которых есть числа равные 2 или меньше 2:
cols_to_drop = df.columns[df.min() <= 2]
df = df.drop(cols_to_drop, axis=1)
df замените на название вашего датафрейма.
Это можно сделать одной строкой с помощью loc и булева массива:
df = df.loc[:, df.min().gt(2)]
Полный пример с генерацией исходного фрейма:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0, 10, 100).reshape(10, -1))
print(df)
df = df.loc[:, df.min().gt(2)]
print(df)
Результат:
0 1 2 3 4 5 6 7 8 9
0 7 4 7 9 2 3 9 4 3 7
1 2 6 7 8 7 0 2 0 9 5
2 8 3 9 7 9 5 0 4 7 5
3 9 4 9 9 3 0 4 9 3 4
4 9 9 3 1 7 2 9 8 5 2
5 3 6 6 9 3 3 5 0 4 6
6 5 6 9 0 6 0 1 9 2 0
7 5 7 3 6 8 7 2 4 3 7
8 0 3 7 1 1 6 6 9 9 4
9 6 4 8 9 5 6 6 5 2 1
1 2
0 4 7
1 6 7
2 3 9
3 4 9
4 9 3
5 6 6
6 6 9
7 7 3
8 3 7
9 4 8