Это может быть потому, что ваш график направлен. Степень узла с 4 ребрами равна 4, но G.edges (узел) будет возвращать только те ребра, которые происходят от этого узла, а не те, которые указывают на него.
Вы можете получить доступ к ребрам, указывающим на узел, используя G.in_edges(node)
Пример с ориентированным графом H
против неориентированного графа G
:
df = pd.DataFrame({a:np.random.randint(0,10,10) for a in 'ab'})
df
a b
0 3 1
1 5 8
2 0 3
3 4 0
4 3 7
5 9 3
6 3 2
7 4 9
8 6 1
9 2 4
G = nx.from_pandas_edgelist(df, source='a', target='b')
H = nx.from_pandas_edgelist(df, source='a', target='b', create_using =nx.DiGraph())
pos = nx.spring_layout(G)
plt.subplot(121)
nx.draw_networkx(G, pos=pos)
plt.subplot(122)
nx.draw_networkx(H, pos=pos)
for i in G.nodes:
print(i, G.degree(i), G.edges(i))
3 5 [(3, 1), (3, 0), (3, 7), (3, 9), (3, 2)]
1 2 [(1, 3), (1, 6)]
5 1 [(5, 8)]
8 1 [(8, 5)]
0 2 [(0, 3), (0, 4)]
4 3 [(4, 0), (4, 9), (4, 2)]
7 1 [(7, 3)]
9 2 [(9, 3), (9, 4)]
2 2 [(2, 3), (2, 4)]
6 1 [(6, 1)]
for i in H.nodes:
print(i, H.degree(i), H.edges(i), H.in_edges(i))
3 5 [(3, 1), (3, 7), (3, 2)] [(0, 3), (9, 3)]
1 2 [] [(3, 1), (6, 1)]
5 1 [(5, 8)] []
8 1 [] [(5, 8)]
0 2 [(0, 3)] [(4, 0)]
4 3 [(4, 0), (4, 9)] [(2, 4)]
7 1 [] [(3, 7)]
9 2 [(9, 3)] [(4, 9)]
2 2 [(2, 4)] [(3, 2)]
6 1 [(6, 1)] []