#python #pandas #dataframe #numpy
Pandas предоставляет инструменты свертки структур данных для получения сводной
информации. Для выполнения операции “логическое ИЛИ” по строкам(axis=1) или столбцам(по
умолчанию или axis=0) используется метод any(), аналогично “логическое И” - метод
all(). Если у меня есть таблица:
import pandas as pd
import numpy as np
tab1 = pd.DataFrame(np.array([[1,2,3],[10,20,30]]))
0 1 2
0 1 2 3
1 10 20 30
Дальше я проверяю элементы таблицы на условие tab1[tab1>2].
Получаю:
0 1 2
0 NaN NaN 3
1 10.0 20.0 30
tab1>2
0 1 2
0 False False True
1 True True True
Свертка по столбцам (tab1 >2).any():
0 True
1 True
2 True
dtype: bool
Свертка по строкам (tab1 >2).any(axis = 1)
0 True
1 True
dtype: bool
Как получить сводную таблицу, использую метод any(), all()? Как этот метод применить
практически? Пока я только получила логические переменные в DataFrame. Вариант с
маской не срабатывает:
#по столбцам
maska3 = (tab1>2).all(axis = 0)
tab1[maska3]
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:2: UserWarning: Boolean
Series key will be reindexed to match DataFrame index.
0 1 2
А должен вывести последний столбец.
Ответы
Ответ 1
In [7]: tab1.loc[:, (tab1 > 2).all()] Out[7]: 2 0 3 1 30 Пояснение: DataFrame для примера: In [15]: df = pd.DataFrame(np.array([[1,2,3],[10,20,30]]), columns=list("abc")) In [16]: df Out[16]: a b c 0 1 2 3 1 10 20 30 Оператор DataFrame[arg] - пытается угадать тип индексирования/фильтрования. Если в качестве аргумента передан вектор булевых значений, длина которого совпадает с числом строк DataFrame, значит пользователь фильтрует строки, использую "булеву максу". In [17]: df[[True, False]] Out[17]: a b c 0 1 2 3 В противном случае пользователь пытается выбрать столбцы DataFrame: In [19]: df["a"] Out[19]: 0 1 1 10 Name: a, dtype: int32 In [20]: df[["a", "c"]] Out[20]: a c 0 1 3 1 10 30 Для более тонкой/гибкой выборки лучше использовать selector's: DataFrame.loc[, ] - selection by label DataFrame.iloc[ , ] - selection by position
Комментариев нет:
Отправить комментарий