You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何将含两列ID的长格式DataFrame转为距离矩阵

pandas长表转距离矩阵宽表实现方案

你需要实现的是典型的长格式数据透视为宽格式矩阵的操作,用pandas原生方法即可快速完成,具体步骤如下:

  • 导入依赖并构造原始样例数据(若已有现成DataFrame可跳过该步)
import pandas as pd

# 完全匹配你给出的原始数据结构
df = pd.DataFrame({
    'id1': ['c1','c1','c1','c1','c2','c2','c2','c2','c3','c3','c3','c3','c4','c4','c4','c4'],
    'id2': ['c1','c2','c3','c4','c1','c2','c3','c4','c1','c2','c3','c4','c1','c2','c3','c4'],
    'dist': [0,1,5,7,8,0,5,6,3,2,0,4,6,5,4,0]
})
  • 核心转换代码:直接调用pivot方法,指定行索引、列名、单元格填充值对应的列即可
dist_matrix = df.pivot(index='id1', columns='id2', values='dist')

执行后得到的dist_matrix完全匹配你给出的目标结构:

c1c2c3c4
c10157
c28056
c33204
c46540

特殊场景适配

  • 如果原始数据中存在重复的id1+id2组合(即同一对标识对应多条dist记录),直接用pivot会触发报错,此时可替换为pivot_table方法,指定聚合规则即可,例如取同组距离的平均值:
dist_matrix = df.pivot_table(
    index='id1',
    columns='id2',
    values='dist',
    aggfunc='mean' # 可根据需求替换为sum、min、max等其他聚合函数
)
  • 如果需要把行索引id1转为普通列,和你给出的目标样例第一列的index完全对齐,可以追加一行代码:
dist_matrix = dist_matrix.reset_index(names='index')

内容的提问来源于stack exchange,提问作者alireza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 07:24:36