当前位置: 首页 > 面试题库 >

从Pandas DataFrame构造NetworkX图

皇甫德庸
2023-03-14
问题内容

我想从一个简单的Pandas DataFrame创建一些NetworkX图:

        Loc 1   Loc 2   Loc 3   Loc 4   Loc 5   Loc 6   Loc 7
Foo     0       0       1       1       0       0           0
Bar     0       0       1       1       0       1           1
Baz     0       0       1       0       0       0           0
Bat     0       0       1       0       0       1           0
Quux    1       0       0       0       0       0           0

哪里Foo…是指数,并Loc 1Loc 7是列。但是转换为Numpy矩阵或Recarray似乎无法为生成输入nx.Graph()。是否有实现这一目标的标准策略?我不反对在Pandas中重新格式化数据->转储到CSV->导入到NetworkX,但是似乎我应该能够从索引生成边缘,并从值生成节点。


问题答案:

NetworkX期望一个(节点和边的)方阵,也许*您想通过它:

In [11]: df2 = pd.concat([df, df.T]).fillna(0)

注意:索引和列的顺序相同很重要!

In [12]: df2 = df2.reindex(df2.columns)

In [13]: df2
Out[13]: 
       Bar  Bat  Baz  Foo  Loc 1  Loc 2  Loc 3  Loc 4  Loc 5  Loc 6  Loc 7  Quux
Bar      0    0    0    0      0      0      1      1      0      1      1     0
Bat      0    0    0    0      0      0      1      0      0      1      0     0
Baz      0    0    0    0      0      0      1      0      0      0      0     0
Foo      0    0    0    0      0      0      1      1      0      0      0     0
Loc 1    0    0    0    0      0      0      0      0      0      0      0     1
Loc 2    0    0    0    0      0      0      0      0      0      0      0     0
Loc 3    1    1    1    1      0      0      0      0      0      0      0     0
Loc 4    1    0    0    1      0      0      0      0      0      0      0     0
Loc 5    0    0    0    0      0      0      0      0      0      0      0     0
Loc 6    1    1    0    0      0      0      0      0      0      0      0     0
Loc 7    1    0    0    0      0      0      0      0      0      0      0     0
Quux     0    0    0    0      1      0      0      0      0      0      0     0

In[14]: graph = nx.from_numpy_matrix(df2.values)

如果您希望这样做,则不会将列/索引名称传递给图形relabel_nodes(您可能需要警惕重复,这在熊猫的DataFrames中是允许的):

In [15]: graph = nx.relabel_nodes(graph, dict(enumerate(df2.columns))) # is there nicer  way than dict . enumerate ?

*目前尚不清楚所需图形的列和索引代表什么。



 类似资料:
  • NetworkX是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。 示例代码: >>> import networkx as nx>>> G=nx.Graph()>>> G.add_node("spam")>>> G.add_edge(1,2)>>> print(G.nodes())[1, 2, 'spam']>

  • 我想创建一个大型networkx图,将用户连接到他们观看的视频,就像用户- CSV文件示例 用户,视频 1, 11 2, 11 3、11 4、12 5, 12 5、13 我在尝试什么? 我得到的是:一个所有红色节点的图表。 我要的:我要用户节点是红色的,视频节点是蓝色的,提前谢谢你的帮助。

  • C 风格的循环通常不必要 你可以写 C 风格的循环,但常常不需要它们。 不要在 foreach 的位置使用它们: for (my $i = 0; $i <= $#foo; $i++) { # BAD foreach (@foo) { # BETTER 不要在 while 的位置使用它们: for (my $i = <STDIN>; $i; $i = <STDIN>) { # BAD whil

  • 这是一款放置型游戏,游戏虽然没什么精美的图片和动听的音乐,但还是有相当的经营乐趣。

  • 问题内容: 我正在尝试执行以下操作 如何使用Numpy数组中的所有元素轻松高效地创建集合? 问题答案: 如果需要一组元素,这是另一种可能更快的方法: PS :之间执行比较后,和一个10x100阵列上,我发现,它们都在大约相同的速度来执行。对于3x3阵列,最快的版本是迭代器版本: 我建议这样做,因为它是内存消耗较少的版本(它随阵列的大小扩展得很好)。 PPS :还有一个NumPy函数可以执行类似的操

  • 我猜myObjectToMarshall的编组已经正确完成。 但是,当我使用IntelliJ,调试最后一条指令时,我得到一个空文档: 是否有其他属性可设置?