pandas dataframe to frozenset в зависимости от условий - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть набор данных вроде:

 node    community
  1         2
  2         4
  3         5
  4         2
  5         3
  7         1
  8         3
  10        4
  12        5

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

 [frozenset([1,4]), frozenset([2,10]), frozenset([3,12]),frozenset([5,8]),frozenset([1])]

Есть ли способ сделать это, не меняя фрейм данных в список списка. Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Я бы предложил перебрать ваш GroupBy объект и вместо этого создать карту.

communities = {k: frozenset(g['node']) for k, g in df.groupby('community')}
print(communities)
{1: frozenset({7}),
 2: frozenset({1, 4}),
 3: frozenset({5, 8}),
 4: frozenset({2, 10}),
 5: frozenset({3, 12})}

Или, если вам нужен список (вы потеряете информацию о ключах), тогда

communities = [frozenset(g['node']) for _, g in df.groupby('community')]
0 голосов
/ 06 ноября 2018

Использование GroupBy + apply с frozenset:

res = df.groupby('community')['node'].apply(frozenset).values.tolist()

print(res)

[frozenset({7}), frozenset({1, 4}), frozenset({8, 5}),
 frozenset({2, 10}), frozenset({3, 12})]
...