首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成元素之间的依赖关系矩阵

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

Stack Overflow用户
提问于 2019-09-04 03:39:03
回答 1查看 82关注 0票数 3

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

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

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

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

正如我刚刚注意到的,只需要计算主对角线上面的元素,主对角线将是NaN,而主对角线以下的元素只是镜像。

下面是我的输入示例

代码语言:javascript
复制
         s           t 

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

这是生成上面所示表格的代码

代码语言:javascript
复制
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)

我希望得到下面的表格

代码语言:javascript
复制
    sa1    sa2    sa3    sa4    sa5    ...    sa9  
sa1  -     10      30           123           123
sa2  10     -
sa3  30              - 
sa4                       -
sa5 123                          -
...                                     -
sa9 123                                        -
EN

回答 1

Stack Overflow用户

发布于 2019-09-04 03:44:12

使用dot很容易实现

代码语言:javascript
复制
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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57777815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档