Вы можете сделать это следующим образом:
# Imports and graph creation (you don't need them in your function)
import networkx as nx
import pandas as pd
G = nx.fast_gnp_random_graph(20, 0.1)
Создать диктант центральности:
cc = nx.closeness_centrality(G)
cc
выглядит так:
{0: 0.28692699490662144,
1: 0.26953748006379585,
2: 0.32943469785575047,
3: 0.28692699490662144,
4: 0.30671506352087113,
5: 0.26953748006379585,
...
Затем используйте from_dict
для создания кадра данных:
df = pd.DataFrame.from_dict({
'node': list(cc.keys()),
'centrality': list(cc.values())
})
df
выглядит следующим образом:
centrality node
0 0.286927 0
1 0.269537 1
2 0.329435 2
3 0.286927 3
4 0.306715 4
5 0.269537 5
...
А затем сортируйте его по центру в порядке убывания:
df = df.sort_values('centrality', ascending=False)
Итак, df
выглядит так:
centrality node
12 0.404306 12
7 0.386728 7
2 0.329435 2
4 0.306715 4
0 0.286927 0
...
И вернуть результат. Полный код:
def summary(G):
cc = nx.closeness_centrality(G)
df = pd.DataFrame.from_dict({
'node': list(cc.keys()),
'centrality': list(cc.values())
})
return df.sort_values('centrality', ascending=False)