Pandas: удалить группу из данных, если значение в группе соответствует требуемому условию

у меня есть группы значений в данных и в каждой группе, я хотел бы проверить, если значение в группе ниже 8. Если это условие выполняется, вся группа удаляется из набора данных.

обратите внимание, что значение, на которое я ссылаюсь, находится в другом столбце столбца группировки.

Пример Ввода:

Groups Count
  1      7
  1      11
  1      9 
  2      12
  2      15
  2      21 

выход:

Groups Count
  2      12
  2      15
  2      21 

2 ответов


основываясь на том, что вы описали в вопросе, пока есть хотя бы одно значение ниже 8 в группе, то группы должны быть сняты. Таким образом, эквивалентное утверждение заключается в том, что пока минимальное значение в этой группе ниже 8, Эта группа должна быть удалена.

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

dfnew = df.groupby('Groups').filter(lambda x: x['Count'].min()>8 )
dfnew.reset_index(drop=True, inplace=True) # reset index
dfnew = dfnew[['Groups','Count']] # rearrange the column sequence
print(dfnew)

Output:
   Groups  Count
0       2     12
1       2     15
2       2     21

можно использовать isin, loc и unique С выбором подмножества по перевернутой маске. Последние Вы можете reset_index:

print df

  Groups  Count
0       1      7
1       1     11
2       1      9
3       2     12
4       2     15
5       2     21

print df.loc[df['Count'] < 8, 'Groups'].unique()
[1]

print ~df['Groups'].isin(df.loc[df['Count'] < 8, 'Groups'].unique())

0    False
1    False
2    False
3     True
4     True
5     True
Name: Groups, dtype: bool

df1 = df[~df['Groups'].isin(df.loc[df['Count'] < 8, 'Groups'].unique())]
print df1.reset_index(drop=True)

   Groups  Count
0       2     12
1       2     15
2       2     21