#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