我必须建立一个数据帧元素之间的依赖矩阵。列's‘中的每个元素都有一个不同节点(从1到70)和相应时间(列't')的列表。任务是找出所有节点之间的所有依赖关系,并将时间值的总和放入表中。
例如: node sa1与以下节点连接: sa2、sa3(0行)、sa3(1行)、sa5、sa9(3行)
对于节点sa2、sa5、sa9 with,可以直接使用列'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 -发布于 2019-09-04 03:44:12
使用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 0https://stackoverflow.com/questions/57777815
复制相似问题