опускать группы в pandas groupby на основе условия

#python #pandas

#python #pandas

Вопрос:

Это мой фрейм данных:

 df = pd.DataFrame({'sym': list('aaaaaabb'), 'key': [1, 1, 1, 1, 2, 2, 3, 3], 'x': [100, 100, 90, 100, 500, 500, 700, 700]})
  

Я группирую их по key и sym :

 groups = df.groupby(['key', 'sym'])
  

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

    key sym    x
4    2   a  500
5    2   a  500
6    3   b  700
7    3   b  700
  

Ответ №1:

Использовать GroupBy.transform с SeriesGroupBy.nunique и сравнивать по 1 , фильтровать по boolean indexing :

 df1 = df[df.groupby(['key', 'sym'])['x'].transform('nunique').eq(1)]
print (df1)

  sym  key    x
4   a    2  500
5   a    2  500
6   b    3  700
7   b    3  700