如何基于简单的 Dataframe 创建网络图
How to Create a network graph based a simple Datafrme
我想知道如何根据此类数据创建边缘列表(从、到)。两列都在 pandas 数据框内,类型为字符串。
Name
Co-Workers
A
A,B,C,D
B
A,B,C,D
C
A,B,C,E
D
A,B,D,E
E
C,D,E
而且我还想删除 AA BB CC 等连接,....
IIUC,您可以explode
您的数据并对其进行过滤:
df2 = df.copy()
df2['Co-Workers'] = df['Co-Workers'].str.split(',')
df2 = df2.explode('Co-Workers')
df2[df2['Name'].ne(df2['Co-Workers'])]
输出:
Name Co-Workers
0 A B
0 A C
0 A D
1 B A
1 B C
1 B D
2 C A
2 C B
2 C E
3 D A
3 D B
3 D E
4 E C
4 E D
- 首先将列从字符串拆分为单独值的列表。
- 二、爆列。
- 三、创建方向图
通过
处理数据
然后:
from matplotlib.pyplot import figure
G = nx.from_pandas_edgelist(df2, source='Name', target='Co-Workers')
figure(figsize=(10, 8))
nx_graph = nx.compose(nx.DiGraph(), G)
nx.draw_shell(nx_graph, with_labels=True)
结果图:
我想知道如何根据此类数据创建边缘列表(从、到)。两列都在 pandas 数据框内,类型为字符串。
Name | Co-Workers |
---|---|
A | A,B,C,D |
B | A,B,C,D |
C | A,B,C,E |
D | A,B,D,E |
E | C,D,E |
而且我还想删除 AA BB CC 等连接,....
IIUC,您可以explode
您的数据并对其进行过滤:
df2 = df.copy()
df2['Co-Workers'] = df['Co-Workers'].str.split(',')
df2 = df2.explode('Co-Workers')
df2[df2['Name'].ne(df2['Co-Workers'])]
输出:
Name Co-Workers
0 A B
0 A C
0 A D
1 B A
1 B C
1 B D
2 C A
2 C B
2 C E
3 D A
3 D B
3 D E
4 E C
4 E D
- 首先将列从字符串拆分为单独值的列表。
- 二、爆列。
- 三、创建方向图
通过
然后:
from matplotlib.pyplot import figure
G = nx.from_pandas_edgelist(df2, source='Name', target='Co-Workers')
figure(figsize=(10, 8))
nx_graph = nx.compose(nx.DiGraph(), G)
nx.draw_shell(nx_graph, with_labels=True)
结果图: