Получить только совпадающие строки для групп в Pandas groupby - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть следующий df:

d = {"Col1":['a','d','b','c','a','d','b','c'],
"Col2":['x','y','x','z','x','y','z','y'],
"Col3":['n','m','m','l','m','m','l','l'],
"Col4":[1,4,2,2,1,4,2,2]}

df = pd.DataFrame(d)

Когда я группирую по трем полям, я получаю результат:

gb = df.groupby(['Col1', 'Col2', 'Col3'])['Col4'].agg(['sum', 'mean'])

enter image description here

Как извлечь только те группы и строки, в которых строка группы совпадает хотя бы с одной другой строкой другой группы в сгруппированных столбцах.Пожалуйста, посмотрите на картинку ниже, я хочу получить выделенные строки

enter image description here

Я хочу получить строки красного цвета на основе тех, что в синеми черные, которые соответствуют друг другу

Извинения, если мое утверждение неоднозначно.Любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Вы можете reset_index, затем использовать duplicated и логический индекс фильтровать ваш фрейм данных:

gb = gb.reset_index()
gb[gb.duplicated(subset=['Col2','Col3'], keep=False)]

Вывод:

  Col1 Col2 Col3  sum  mean
0    a    x    m    1     1
2    b    x    m    2     2
3    b    z    l    2     2
5    c    z    l    2     2
0 голосов
/ 27 февраля 2019

Создайте таблицу со всеми разрешенными комбинациями и затем внутренне объедините ее с этим фреймом данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...