Группировка строк с одинаковым значением столбца по нескольким столбцам - PullRequest
0 голосов
/ 07 сентября 2018

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

У меня есть датафрейм для панд, который выглядит как

SERV1 SERV2 SERV3 SERV4 SERV5 SERV6
8766  NaN   NaN   0989  NaN   NaN   
8766  NaN   5434  NaN   NaN   NaN   
NaN   NaN   5434  3212  NaN   NaN   
NaN   1236  NaN   NaN   NaN   6543
NaN   3456  NaN   7862  NaN   NaN   
NaN   NaN   NaN   7862  NaN   4767

И желаемый фрейм данных должен выглядеть как

SERV1   SERV2   SERV3   SERV4         SERV5   SERV6
[8766]  NaN     [5434]  [0989,3212]   NaN     NaN
NaN     [1236]  NaN     NaN           NaN     [6543]   
NaN     [3456]  NaN    [7862]         NaN     [4767]

Столбцы представляют разные службы, значения представляют идентификатор, который является уникальным только для этого конкретного столбца (одно и то же значение в разных столбцах может быть случайным, но его не следует рассматривать как представляющий один и тот же идентификатор).

Мне удалось создать словарь для каждого столбца с соответствующими значениями, но это не то же самое, что иметь df как тот, который я хотел бы.

Используя

df = grouped.aggregate(lambda x: tuple(x))

Я мог бы достичь аналогичной вещи, но это работает только для группировки одного столбца, а не для связи его с другими, он объединяет все NaN, которые на самом деле не принадлежат друг другу.

Я ищу идеи / решения. Благодаря.

1 Ответ

0 голосов
/ 10 сентября 2018

Не найдя полностью решения для панд, я решил сделать это, используя модуль networkx и извлекая подграф с помощью функции connected_component_subgraphs, а затем распаковывая результаты в кадр данных. Не очень элегантно, но это работает.

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