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

如何基于带MultiIndex的距离矩阵直接构建Pandas DataFrame

用Pandas多级索引DataFrame直接生成跨类别标签对的距离表

其实你完全不用写那些手动拼接索引的“hacky”代码,Pandas内置的stack()方法就能完美解决你的需求,直接基于你已经构建好的distances_matrix生成目标DataFrame,步骤超简单:

核心代码实现

# 直接从distances_matrix转换
distances_df = distances_matrix.stack([0, 1]).reset_index()
# 给列起个清晰的名字
distances_df.columns = ['F', 'Ftags', 'P', 'Ptags', 'distance']
print(distances_df)

运行结果

F   Ftags   P   Ptags  distance
0  F1  tag1f1  B1  tag1b1       4.0
1  F1  tag1f1  B2  tag1b2      16.0
2  F1  tag1f1  B2  tag2b2      64.0
3  F2  tag1f2  B1  tag1b1      16.0
4  F2  tag1f2  B2  tag1b2      36.0
5  F2  tag1f2  B2  tag2b2     100.0

步骤解释

  1. stack([0,1]):这里的[0,1]指定要把列的前两个层级(P和Ptags)从列索引“堆叠”到行索引里,和原来的行索引(F、Ftags)合并成一个4级的MultiIndex,此时数据变成一个Series,索引是每一对跨类别标签组合,值就是对应的距离。
  2. reset_index():把这个多级索引拆成普通的列,方便后续处理。
  3. 重命名列:默认的列名是level_0、level_1这类,改成有意义的名字让结果更直观。

后续分组需求适配

你提到最终需要按类别分组,用这个方法生成的DataFrame直接用groupby()就能轻松实现,比如:

  • 按F类别分组:distances_df.groupby('F')
  • 按F和P的组合类别分组:distances_df.groupby(['F', 'P'])

这种方法完全依赖Pandas的原生操作,比手动处理笛卡尔积和索引拼接简洁太多,可读性和可维护性都强很多~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:24:33