python - 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
解决方案
干得好:
# 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
推荐阅读
- python - pycrypto 需要 Visual Studio?
- python - 从矩阵创建随机数组
- asp.net - 如果正则表达式有效,如何启用按钮
- sql - 显示所有列,其中一列被屏蔽
- react-native - 使用 DrawerNavigator 作为主 UI,应用程序总是进入默认项目屏幕而不显示抽屉项目
- powershell - 将布尔参数从 VSTS 传递到 Powershell 脚本
- docker - 为 Identity Server 4 生成自签名证书时出现“错误:23076071:PKCS12 例程:PKCS12_parse:mac 验证失败”
- nginx - 如何在 Barematel 上运行的 kubernetes 中公开服务
- json - 在 Azure CosmosDB 中查询 Camel case json 文档
- python - ParseFromString 无法解码消息