Pandas Выберите столбцы DataFrame, используя логические
Я хочу использовать логическое значение, чтобы выбрать столбцы с более чем 4000 записей в comb
который имеет более 1000 столбцов. Это выражение дает мне логический (True/False) результат:
criteria = comb.ix[:,'c_0327':].count()>4000
Я хочу использовать его, чтобы выбрать только столбцы True
для нового Dataframe.
Следующее просто дает мне "Неустранимый ключ булевой серии":
comb.loc[criteria,]
Я также попробовал:
comb.ix[:, comb.ix[:,'c_0327':].count()>4000]
Как и в этом вопросе, ответ булево выделение данных в кадре по столбцам, а не по строкам, но при этом возникает та же ошибка: "Предоставлен не изменяемый логический ключ серии"
comb.ix[:,'c_0327':].count()>4000
выходы:
c_0327 False
c_0328 False
c_0329 False
c_0330 False
c_0331 False
c_0332 False
c_0333 False
c_0334 False
c_0335 False
c_0336 False
c_0337 True
c_0338 False
.....
Ответы
Ответ 1
Возвращается серия с именами столбцов в качестве индекса и логических значений в виде значений строк.
Я думаю, на самом деле вы хотите:
теперь это должно работать:
comb[criteria.index[criteria]]
В основном это использует значения индекса из критериев и логические значения для их маскировки, это вернет массив имен столбцов, мы можем использовать это, чтобы выбрать интересующие столбцы из источника df.
Ответ 2
Вы также можете использовать:
# To filter columns (assuming criteria length is equal to the number of columns of comb)
comb.ix[:, criteria]
comb.iloc[:, criteria.values]
# To filter rows (assuming criteria length is equal to the number of rows of comb)
comb[criteria]
Ответ 3
Я использую это, это чище
comb.values[:,criteria]
кредит: fooobar.com/questions/631135/...
Ответ 4
В пандах 0,25:
comb.loc[:, criteria]
Возвращает фрейм данных со столбцами, выбранными логическим списком или рядом.
Для любого, кто пытается использовать несколько критериев,
comb.loc[:, criteria1 & criteria2]
Примечание:
Использование and
здесь вместо &
НЕ работает. Это связано с тем, что and
пытается определить логическое значение всего массива, в то время как &
работает поэлементно. Это обсуждается в Логических операторах для логического индексирования в Pandas.