Матрица смежности с использованием столбца группировки - PullRequest
3 голосов
/ 03 апреля 2020

Я сейчас начинаю входить в pandas, и мне было интересно, есть ли функция, дающая мне общие категории элементов в DataFrame. Для визуализации:

Это данные, которые у меня есть (очевидно, очень упрощенный пример)

   Discipline   Person
0    football   Alanis
1    football  Bernard
2    football  Delilah
3  basketball  Charlie
4  basketball  Delilah
5      tennis  Charlie

И я хотел бы выяснить, какие два человека разделяют дисциплину, в идеале в Форма матрицы выглядит так:

        Alanis  Bernard Charlie Delilah
Alanis  True    True    False   True    
Bernard True    True    False   True
Charlie False   False   True    True
Delilah True    True    True    True    

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

Ответы [ 2 ]

2 голосов
/ 03 апреля 2020

Одним из подходов может быть построение сети и получение из нее матрицы смежности :

import networkx as nx
from itertools import combinations, chain

L = df.groupby('Discipline').Person.agg(list)

G = nx.Graph()
L = [list(combinations(i,2)) for i in L.values.tolist()]
G.add_edges_from(chain.from_iterable(L))

nx.to_pandas_adjacency(G, nodelist=sorted(G.nodes())).astype(bool)

          Alanis  Bernard  Charlie  Delilah
Alanis    False     True    False     True
Bernard    True    False    False     True
Charlie   False    False    False     True
Delilah    True     True     True    False

Если вы хотите, чтобы диагональные значения были установлены в True , вы можете просто добавить:

import numpy as np
out[:] = out.values + np.eye(out.shape[1], dtype=bool)

print(out)

         Alanis  Bernard  Charlie  Delilah
Alanis     True     True    False     True
Bernard    True     True    False     True
Charlie   False    False     True     True
Delilah    True     True     True     True
0 голосов
/ 03 апреля 2020
Функция

value_counts () позволяет найти уникальные значения каждого элемента в данном объекте Series. Вывод: теперь мы будем использовать Series. Функция value_counts (), чтобы найти количество значений каждого уникального значения в данном объекте Series.

...