Присвойте номер группы определенному набору значений в pandas фрейме данных - PullRequest
2 голосов
/ 15 марта 2020

У меня есть датафрейм, как показано ниже

data1=[202,701,410,301,402,201,202,301,310,210,302,302,401,402,601,303]
data2=[210,303,500,302,403,202,203,303,400,300,303,310,402,410,203,801]
df = pd.DataFrame(data1,columns = ['data1'])
df['data2'] = data2

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

[201, 202, 203, 300, 210, 601],
[801, 301, 302, 303, 400, 310, 701],
[401, 402, 403, 500, 410]

Мне не нужен точный родитель или точный дочерний элемент. Я просто хочу сгруппировать всех, кто принадлежит к одной категории в python 3.

Заранее спасибо

1 Ответ

1 голос
/ 15 марта 2020

Использование networkx с connected_components, последнее преобразование вывода в список списков:

import networkx as nx

# Create the graph from the dataframe
g = nx.Graph()
g.add_edges_from(df[['data1','data2']].itertuples(index=False))

Упрощение использования convert_matrix.from_pandas_edgelist, спасибо @Dyz:

g = nx.from_pandas_edgelist(df,'data1','data2')

connected_components = nx.connected_components(g)

L = [list(x) for x in connected_components]
print (L)
[[201, 202, 203, 300, 210, 601], 
 [801, 301, 302, 303, 400, 310, 701], 
 [401, 402, 403, 500, 410]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...