首页 > 解决方案 > Python:将矩阵转换为排列表

问题描述

给定一组 id,我需要从矩阵(时间 A 和 B)中获取每个 id 组合的值,并创建一个数据框,附加所有排列的值。

我已经能够通过创建排列数据框然后在查找和填充值时迭代它来做到这一点。但是我需要为大约 3000 个 id 而不是 3 个这样做,而且我不知道如何有效地做到这一点。

我可以生成一个 Time A/B 数据框作为我的示例,而不必遍历 9000000* 行吗?我知道我不应该通过数据框进行迭代,但是我还没有找到替代方案。

标识 (3):

[15, 24, 38]

时间矩阵(3x3):

id          15        24      38
15          0         1.8     1.7
24          1.2       0       1.9
38          1.5       1.3     0

时间 B 矩阵 (3x3):

id          15        24      38
15          0         88.7    87.3
24          42.2      0       32.7
38          65.6      13.5    0

时间 A/B 数据帧(6):

id_start    id_end    A       B
15          24        1.8     88.7
15          38        1.9     32.7
24          15        1.2     42.2
24          38        1.9     65.6
38          15        1.5     65.6
38          24        1.3     13.5

标签: pythonpandasnumpydataframematrix

解决方案


干得好:

# drop set_index('id') if `id` is already index
(pd.concat([timeA.set_index('id').stack().to_frame(name='A'),
           timeB.set_index('id').stack().to_frame(name='B')], axis=1)
   .rename_axis(index=['id_start','id_end'])
   .query('id_start != id_end')
   .reset_index()
)

输出:

   id_start  id_end    A     B
1        15      24  1.8  88.7
2        15      38  1.7  87.3
3        24      15  1.2  42.2
5        24      38  1.9  32.7
6        38      15  1.5  65.6
7        38      24  1.3  13.5

推荐阅读