Pandas: elimina el grupo de los datos cuando un valor en el grupo cumple con una condición requerida

Tengo agrupaciones de valores en los datos y dentro de cada grupo, me gustaría verificar si un valor dentro del grupo es inferior a 8 . Si se cumple esta condición, todo el grupo se elimina del conjunto de datos.

Tenga en cuenta que el valor al que me refiero se encuentra en otra columna de la columna de agrupaciones.

Ejemplo de entrada:

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

Salida:

 Groups Count 2 12 2 15 2 21 

Según lo que describió en la pregunta, siempre que haya al menos un valor por debajo de 8 dentro del grupo, ese grupo debe eliminarse. Por lo tanto, la statement equivalente es que siempre que el valor mínimo dentro de ese grupo sea inferior a 8, ese grupo debe eliminarse.

Al usar la función de filtro, el código real se puede reducir a solo una línea, consulte Filtración , puede usar el siguiente código:

 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 

Puede usar isin , loc y unique seleccionando un subconjunto por máscara invertida. Último puedes 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