import networkx as net
def get_Children(g, df):
for i in range(0, (df.iloc[:,0].size)-1):
f1 = df.iloc[i]['firm1']
f2 = df.iloc[i]['firm2']
if f1 != f2:
if df.iloc[i]['children'] == 1.0:
g.add_edge(f1, f2)
else: continue
return g
g = net.Graph()
g.add_nodes_from(index)
get_Children(g, df)
这样的数据:
坚定的公司2个孩子如果firm1是firm2的子女,则获得1,否则为0。
但是我使用上面的函数添加任何边缘。
在[177]中:g.edges()
输出[177]:EdgeView([])
答案 0 :(得分:0)
我试图在这里重现您的代码,而且我似乎能够使用您提供的代码主要使用add_edge()
生成边缘:
import pandas as pd
import networkx as nx
df = pd.DataFrame({'firm1':[1,1,1,2,2,2,3,3,3,4,4,4],
'firm2':[2,3,4,3,1,4,1,2,4,1,2,3],
'children':[0,1,0,1,0,1,0,0,0,0,0,0]})
这给出了您提供的DataFrame:
children firm1 firm2
0 0 1 2
1 1 1 3
2 0 1 4
3 1 2 3
4 0 2 1
5 1 2 4
6 0 3 1
7 0 3 2
8 0 3 4
9 0 4 1
10 0 4 2
11 0 4 3
我复制了剩下的代码,我唯一改变的就是将index
替换为[1,2,3,4]
(以及net
替换为nx
,这是NetworkX的惯例包:
def get_Children(g, df):
for i in range(0, (df.iloc[:,0].size)-1):
f1 = df.iloc[i]['firm1']
f2 = df.iloc[i]['firm2']
if f1 != f2:
if df.iloc[i]['children'] == 1.0:
g.add_edge(f1, f2)
else: continue
return g
g = nx.Graph()
g.add_nodes_from([1,2,3,4])
get_Children(g, df)
g.edges()
g.edges()
导致:
EdgeView([(1, 3), (2, 3), (2, 4)])
我使用Python 3来重现这一点。也许您使用index
的错误值?