Группировка и фильтрация по уникальному сочетанию
Есть таблица следующего вида:
user, cart
1, 1
1, 1
1, 2
2, 1
2, 2
2, 3
2, 3
2, 3
3, 1
...
Каким образом можно достать только те строки, где у user по крайне мере есть два уникальных cart, и только там, где cart с наименьшим номером. То есть, для данной таблицы я хочу получить:
user, cart
1, 1
1, 1
2, 1
user=1 подошел, т.к. у него есть cart=1,2, значит мы его оставляем, но берем только cart с наименьшим номером, то есть 1, поэтому останутся только:
1, 1
1, 1
аналогично для user=2, для user=3 не берем, т.к. там только одна уникальная cart равная 1.
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
res = (df
.merge(df
.groupby("user")
.filter(lambda x: x["cart"].nunique() > 1)
.groupby("user")
["cart"]
.min()
.reset_index()))
результат:
In [407]: res
Out[407]:
user cart
0 1 1
1 1 1
2 2 1