我想以 (row, column): value 的形式创建一个字典,来自对称矩阵(如距离矩阵),如下所示,不考虑 NaN 值或零(零是对角线)。该矩阵是一个熊猫数据框。
Material 100051 100120 100138 100179 100253 100265 100281
100051 0.0 0.953488 0.959302 0.953488 0.959302 0.953488 0.953488
100120 NaN 0.000000 0.965116 0.953488 0.959302 0.959302 0.959302
100138 NaN NaN 0.000000 0.959302 0.970930 0.970930 0.970930
100179 NaN NaN NaN 0.000000 0.959302 0.953488 0.953488
100253 NaN NaN NaN NaN 0.000000 0.976744 0.976744
... ... ... ... ... ... ... ...
所以一个看起来像的字典:
{((100120, 100051): 0.953488); ((1000138, 100051): 0.959302); ....}
要创建字典,您可能可以遍历行和列,例如:
jacsim_values = {}
for i in jacsim_matrix2:
for j in jacsim_matrix2:
if jacsim_matrix[i][j] != 0:
jacsim_values[i,j] = jacsim_matrix2[i][j]
但我正在寻找更有效的东西。对于矩阵的大小,这需要相当长的时间。但是,我找不到如何执行此操作。有人可以帮我吗?
IIUC,或+DataFrame.stack
(row, column)
DataFrame.unstack
(column, row)
DataFrame.to_dict
df.set_index('Material').rename(int, axis=1).unstack().to_dict()
{(100051, 100051): 0.0,
(100051, 100120): nan,
(100051, 100138): nan,
(100051, 100179): nan,
(100051, 100253): nan,
(100120, 100051): 0.9534879999999999,
(100120, 100120): 0.0,
(100120, 100138): nan,
(100120, 100179): nan,
(100120, 100253): nan,
(100138, 100051): 0.9593020000000001,
(100138, 100120): 0.965116,
(100138, 100138): 0.0,
(100138, 100179): nan,
(100138, 100253): nan,
(100179, 100051): 0.9534879999999999,
(100179, 100120): 0.9534879999999999,
(100179, 100138): 0.9593020000000001,
(100179, 100179): 0.0,
(100179, 100253): nan,
(100253, 100051): 0.9593020000000001,
(100253, 100120): 0.9593020000000001,
(100253, 100138): 0.97093,
(100253, 100179): 0.9593020000000001,
(100253, 100253): 0.0,
(100265, 100051): 0.9534879999999999,
(100265, 100120): 0.9593020000000001,
(100265, 100138): 0.97093,
(100265, 100179): 0.9534879999999999,
(100265, 100253): 0.9767440000000001,
(100281, 100051): 0.9534879999999999,
(100281, 100120): 0.9593020000000001,
(100281, 100138): 0.97093,
(100281, 100179): 0.9534879999999999,
(100281, 100253): 0.9767440000000001}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句