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