我有一个Pandas Dataframe (把它想象成网络中节点的加权邻接矩阵),格式为df,
A B C D
A 0 0.5 0.5 0
B 1 0 0 0
C 0.8 0 0 0.2
D 0 0 1 0
我想得到一个 Dataframe ,而不是代表一个边列表。对于上面的例子,我需要的形式,edge_list_df,
Source Target Weight
0 A B 0.5
1 A C 0.5
2 A D 0
3 B A 1
4 B C 0
5 B D 0
6 C A 0.8
7 C B 0
8 C D 0.2
9 D A 0
10 D B 0
11 D C 1
什么是最有效的创建方法?
4条答案
按热度按时间jdzmm42g1#
将对角线标记为
nan
,然后我们使用stack
rjzwgtxy2#
使用
rename_axis
+reset_index
+melt
:从
0.20
开始,melt
作为DataFrame
对象的函数被引入,对于较早的版本,您需要使用pd.melt
:计时
jckbn6z73#
使用NumPy工具的两种方法-
方法1
样品运行-
方法2
运行时间测试
使用
@cᴏʟᴅsᴘᴇᴇᴅ's timing setup
:ctzwtxfj4#
使用NetworkX 2.x API: