Boolean Mask Groupby Any и Создать индикатор - PullRequest
0 голосов
/ 04 июля 2018

У меня есть файл данных pandas в следующем формате:

id,criteria_1,criteria_2,criteria_3,criteria_4,criteria_5,criteria_6
1,0,0,95,179,1,1
1,0,0,97,185,NaN,1
1,1,2,92,120,1,1
2,0,0,27,0,1,NaN
2,1,2,90,179,1,1
2,2,5,111,200,1,1
3,1,2,91,175,1,1
3,0,8,90,27,NaN,NaN
3,0,0,22,0,NaN,NaN

У меня есть следующая программа из Python PANDAS: Индикатор создания первого преобразования GroupBy :

mask = (((df['criteria_1'] >=1.0) | (df['criteria_2'] >=2.0)) &
         (df['criteria_3'] >=90.0) &
         (df['criteria_4'] <=180.0) &
         ((df['criteria_5'].notnull()) & (df['criteria_6'].notnull())))

# reset_index() defaults to drop=False. It inserts the old index into the DF 
# as a new column named 'index'.
idx = df.reset_index()[mask].groupby('id').first().reset_index(drop=True)['index']

df['flag'] = df.index.isin(idx).astype(int)

Однако теперь я хотел бы выбрать для любых строк, где условия выполняются группой, а не только в первой. Это не так просто, как замена .any () или .all () на .first (). Будем благодарны за любые советы по устранению неполадок!

1 Ответ

0 голосов
/ 04 июля 2018

Вы можете использовать mask напрямую для извлечения всех строк, соответствующих вашим условиям:

df['flag'] = mask.astype(int)

Помните, что mask - это просто серия, которая возвращает для каждой строки логическое значение в зависимости от того, выполнены ли все критерии.

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