Я пытаюсь построить сеть, в которой мои ребра состоят из кортежей. Я пытаюсь сгруппировать все связанные элементы, но только на основе одного элемента в кортеже.
Аналогично: Группировка всех связанных узлов набора данных
Примечание: Панды 23,4
С учетом следующего кадра данных:
col1 col2 col1Name col2Name
'A' 'B' '12345' '78911'
'C' 'B' '12345' '78911'
'J' 'K' '12345' '12345'
'E' 'D' '12345' '12345'
Я объединяю col1 и col1Name в кортеж и делаю то же самое с col2 / col2Name.
col1 col2
('A','12345') ('B','78911')
('C','12345') ('B','78911')
('J','12345') ('K','12345')
('E','12345') ('D','12345')
('X','99999') ('B','99999')
Отсюда я пытаюсь найти всю «связанную» информацию, но не в отношении второго элемента кортежа, только первого.
Так что, если бы я сгруппировал информацию, она бы выглядела следующим образом:
col1 col2
('A','12345') ('B','78911')
('C','12345') ('B','78911')
col1 col2
('J','12345') ('K','12345')
col1 col2
('E','12345') ('D','12345')
col1 col2
('X','99999') ('B','99999')
Обратите внимание, что группы не учитывают col1Name / col2Name, что бы ни было. Эта информация существует только для того, чтобы придать элементам col1 / col2 больше «уникальности». Также стоит отметить, что возможно иметь несколько A, B, C и т. Д. В моем примере ('B','78911')
не совпадает с ('B','99999')
Мое мышление (из ссылки):
G.add_edges_from(df.values.tolist())
cc = list(nx.connected_components(G))
component = next(i for i in cc if ('A') in i)
test = df[df.isin(component).all(1)]
Возвращает все группы, связанные с «A», но также и группы, связанные с «12345», «78911». Я пытаюсь сгруппировать только по первому элементу.