繁体   English   中英

生成元素之间的依赖关系矩阵

[英]Generate a matrix of dependencies between elements

我必须在数据框的元素之间构建一个依赖关系矩阵。 列's'中的每个元素都有一个不同节点的列表(从1到70)和相应的时间(列't')。 任务是找到所有节点之间的所有依赖关系,并将时间值的总和放入表中。

例如:节点sa1与以下节点有连接:sa2,sa3(0行),sa3(1行),sa5,sa9(3行)

对于节点sa2,sa5,sa9,可以直接使用列't'中的值,因为它们只出现一次。 节点3有两行,因此我们添加't'值。

我试图用许多for循环解决它,我有时间问题,处理大约50分钟的数据,所以需要一些提示如何准备数据进行分析。

正如我刚刚注意到的那样,有必要仅计算主对角线上方的元素,主对角线为NaN,主对角线下方的元素仅为镜像。

这就是我输入的示例

         s           t 

 0  sa1,sa2,sa3     10
 1  sa1,sa3         20
 2  sa1,sa5,sa9     123

这是生成上述表格的代码

sas = pd.Series(['sa1,sa2,sa3', 'sa1,sa3', 'sa1,sa5,sa9'], name='s')
times = pd.Series([10, 20, 123], name='t')
df = pd.concat([sas, times], axis=1)

我希望得到下表

    sa1    sa2    sa3    sa4    sa5    ...    sa9  
sa1  -     10      30           123           123
sa2  10     -
sa3  30              - 
sa4                       -
sa5 123                          -
...                                     -
sa9 123                                        -

使用dot轻松实现

s=df.s.str.get_dummies(',')
s=s.mul(df.t,0).T.dot(s)
s.values[[np.arange(s.shape[0])]*2] = 0
s
Out[104]: 
     sa1  sa2  sa3  sa5  sa9
sa1    0   10   30  123  123
sa2   10    0   10    0    0
sa3   30   10    0    0    0
sa5  123    0    0    0  123
sa9  123    0    0  123    0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM