Python 使用公共列从数据帧创建网络

Python 使用公共列从数据帧创建网络,python,pandas,csv,networkx,Python,Pandas,Csv,Networkx,我目前正在尝试使用Python上的NetworkX生成网络图。 数据集具有以下格式(它是CSV): 目标是显示标记之间的关系。F.e.科学与历史有着密切的联系,因为它们有着相同的Id。现在我陷入了困境: 如何创建一个表/矩阵,该表/矩阵有两列供NetworkX用作Python的源(-Tag)和目标(-Tag) 我尝试使用Pandas创建一个数据框,然后使用同一列两次,但这对我不起作用。要基于Id连接节点,有一种方法,您可以通过Id,将组聚合到列表,并构建一个定向图,将列表添加为路径: df =

我目前正在尝试使用Python上的NetworkX生成网络图。 数据集具有以下格式(它是CSV):

目标是显示标记之间的关系。F.e.科学与历史有着密切的联系,因为它们有着相同的Id。现在我陷入了困境: 如何创建一个表/矩阵,该表/矩阵有两列供NetworkX用作Python的源(-Tag)和目标(-Tag)


我尝试使用Pandas创建一个数据框,然后使用同一列两次,但这对我不起作用。

要基于
Id连接节点,有一种方法,您可以通过
Id
,将组聚合到列表,并构建一个定向图,将列表添加为路径:

df = pd.read_csv('my_file.csv', sep=', ')
l = df.groupby('Id').Tag.agg(list).tolist()
# [['science', 'history'], ['sports'], ['sci-fi', 'history', 'music']]

G=nx.Graph()
for sl in l:
    nx.add_path(G, sl)

nx.draw(G, node_color='lightblue', 
        with_labels=True, 
        node_size=800)


对于有向图:

G=nx.DiGraph()
for sl in l:
    nx.add_path(G, sl)

nx.draw(G, node_color='lightblue', 
        with_labels=True, 
        node_size=800)

体育与历史有什么关系?这是因为它们有相同的IDB,但它们没有。体育的id是1。我的错,我改正了。到目前为止你试了什么?请多谢,这正是我想要的!:)你知道有没有办法优化l=df.groupby('Id').Tag.agg(list.tolist()?使用较大的集合速度非常慢…没问题:)请尝试
df.groupby('Id').Tag.agg(list.values.tolist()
@HelloNirvanaNorway
G=nx.DiGraph()
for sl in l:
    nx.add_path(G, sl)

nx.draw(G, node_color='lightblue', 
        with_labels=True, 
        node_size=800)