将 Pandas 数据框转换为包含 ID 和权重的元组列表
Convert Pandas data frame to a list of tuples containing IDs and a weight
我有一个数据框(称为 df),其当前格式如下:
1 2 3
1 1 0.26 0.02
2 0.26 1 0.61
3 0.02 0.61 1
ID 由一个值连接,我想以某种方式提取所有唯一 ID 值,以便以更有效的方式将它们添加到我在 networkx 上的图表中。
输出应如下所示:
ed_list = [(1,2,{'weight': 0.26}),(1,3,{'weight': 0.02}),(2,3,{'weight':0.61})]
目前我使用的方法如下:
# Create matrix
new_ = df.values
A_d = np.matrix(new_)
G = nx.from_numpy_matrix(A_d)
我想知道从我的 df 创建一个元组列表是否 easier/more 有效,我可以用它来连接我的节点,然后我可以像这样添加边:
G.add_edges_from(ed_list)
编辑:我在之前版本的问题中犯了一个错误——列名和行名只是整数
你能试试吗:
# this s is what you are looking for
s = df.where(df.index.values > df.columns.values[:,None]).stack().reset_index(name='weight')
# we can use dataframe directly
G = nx.from_pandas_edgelist(s,source='level_0',target='level_1', edge_attr='weight')
或者更简单:
G = nx.from_pandas_adjacency(df)
我有一个数据框(称为 df),其当前格式如下:
1 2 3
1 1 0.26 0.02
2 0.26 1 0.61
3 0.02 0.61 1
ID 由一个值连接,我想以某种方式提取所有唯一 ID 值,以便以更有效的方式将它们添加到我在 networkx 上的图表中。
输出应如下所示:
ed_list = [(1,2,{'weight': 0.26}),(1,3,{'weight': 0.02}),(2,3,{'weight':0.61})]
目前我使用的方法如下:
# Create matrix
new_ = df.values
A_d = np.matrix(new_)
G = nx.from_numpy_matrix(A_d)
我想知道从我的 df 创建一个元组列表是否 easier/more 有效,我可以用它来连接我的节点,然后我可以像这样添加边:
G.add_edges_from(ed_list)
编辑:我在之前版本的问题中犯了一个错误——列名和行名只是整数
你能试试吗:
# this s is what you are looking for
s = df.where(df.index.values > df.columns.values[:,None]).stack().reset_index(name='weight')
# we can use dataframe directly
G = nx.from_pandas_edgelist(s,source='level_0',target='level_1', edge_attr='weight')
或者更简单:
G = nx.from_pandas_adjacency(df)