Панды, если некоторые из нескольких условий верны (булева математика?) - PullRequest
0 голосов
/ 22 января 2019

Итак, у меня есть фрейм данных с 6 столбцами с плавающей точкой (>= 0, <= 100), и мне нужно выбрать каждую строку, где как минимум 4 из этих столбцов больше 15.

Я мог бы написать действительно, действительно,длинное заявление, чтобы охватить каждую возможность, но я чувствую, что есть гораздо более эффективное решение.Я нашел подобное решение в R, которое могло бы решить мою проблему, которая работает следующим образом:

if(((x >= 15) + (y >= 15) + (z >= 15) + (i >= 15) + (j >= 15) + (k >= 15)) >= 4)

Есть ли в Python и / или Pandas что-нибудь подобное?

Очевидно, что он должен работать и в формате df[(condition) & (condition)...].

Ответы [ 2 ]

0 голосов
/ 22 января 2019
df.loc[:, (df > 15).sum() >=4]

для подмножества столбцов

columns_to_consider = ['a', 'b', 'c']
df.loc[:, ((df[columns_to_consider] > 15).sum() >=4).index]
# or
df[columns_to_consider].loc[:, (df[columns_to_consider] > 15).sum() >=4]
0 голосов
/ 22 января 2019

Предполагая, что вы хотите фильтровать строки, по крайней мере, с 4 значениями больше 15, вы можете использовать логическое индексирование:

# first identify numeric columns, if necessary
num_cols = df.select_dtypes(include='number').columns

# apply conditional filter
res = df[(df[num_cols] > 15).sum(1) >= 4]

# alternative syntax
res = df[df[num_cols].gt(15).sum(1).ge(4)]

Идея состоит в том, чтобы построить логический фрейм данных df > 15, сумма за строкой черезpd.DataFrame.sum, затем построить булеву серию, сравнивая с 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...