将 Pandas 数据框转换为包含 ID 和权重的元组列表

Posted

技术标签:

【中文标题】将 Pandas 数据框转换为包含 ID 和权重的元组列表【英文标题】:Convert Pandas data frame to a list of tuples containing IDs and a weight 【发布时间】:2021-01-11 20:45:38 【问题描述】:

我有一个数据框(称为 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 创建一个元组列表是否会更容易/更有效,我可以用它来连接我的节点,然后我可以像这样添加边:

G.add_edges_from(ed_list)

编辑:我在以前版本的问题中犯了一个错误 - 列名和行名只是整数

【问题讨论】:

【参考方案1】:

你可以试试:

# 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 中的所有值,而第一个选项仅返回唯一组合。不确定一个是否会比另一个更有效,但我会对此进行更新:-)

以上是关于将 Pandas 数据框转换为包含 ID 和权重的元组列表的主要内容,如果未能解决你的问题,请参考以下文章

将包含 NaN 的 Pandas 列转换为 dtype `int`

将 json 转换为 Pandas 数据框

将 Json 转换为 Pandas 数据框

将字典转换为 pandas 数据框

如何将 json 转换为 pandas 数据框?

将 pandas 数据框转换为列表列表以输入 RNN