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

如何用Python基于Count Dataframe的两列变量查找Distance Matrix值并计算总距离

Python实现从大型距离矩阵匹配距离并计算总距离

前提假设

  • 距离矩阵(distance_matrix)为pandas DataFrame,行索引为Origin的取值,列名为Destination的取值;若你用的是numpy数组,需先建立索引与数组位置的映射关系。
  • Count DataFrame(count_df)包含Origin、Destination、Counts三列,其中Origin和Destination的取值与距离矩阵的索引/列名可对齐。

方法1:直接索引匹配(适合中小型Count DataFrame)

利用pandas的行/列索引直接定位距离值,再计算总距离:

import pandas as pd

# 匹配距离值
count_df['Dist'] = count_df.apply(lambda row: distance_matrix.loc[row['Origin'], row['Destination']], axis=1)

# 计算总距离
count_df['Total_Dist'] = count_df['Counts'] * count_df['Dist']

# 最终结果即为包含所有目标字段的count_df

方法2:MultiIndex映射(高效处理大型Count DataFrame)

将距离矩阵转换为MultiIndex的Series,通过索引对齐实现快速匹配,比apply效率更高:

# 将距离矩阵转换为MultiIndex Series(行=Origin,列=Destination)
distance_series = distance_matrix.stack()

# 将count_df的Origin和Destination设为索引,与distance_series对齐
count_df = count_df.set_index(['Origin', 'Destination'])
# 匹配距离值
count_df['Dist'] = distance_series
# 计算总距离
count_df['Total_Dist'] = count_df['Counts'] * count_df['Dist']

# 重置索引回到原始结构
total_distance_df = count_df.reset_index()

方法3:numpy数组版(距离矩阵为numpy数组时)

如果距离矩阵是以numpy数组存储的(无索引信息),先建立值到数组位置的映射:

import numpy as np

# 假设origin_list是距离矩阵行对应的Origin值列表,dest_list是列对应的Destination值列表
origin_to_idx = {val: idx for idx, val in enumerate(origin_list)}
dest_to_idx = {val: idx for idx, val in enumerate(dest_list)}

# 匹配距离值
count_df['Dist'] = count_df.apply(
    lambda row: distance_matrix_np[origin_to_idx[row['Origin']], dest_to_idx[row['Destination']]],
    axis=1
)

# 计算总距离
count_df['Total_Dist'] = count_df['Counts'] * count_df['Dist']

关键注意事项

  1. 数据对齐校验:提前过滤掉Count DataFrame中Origin/Destination不在距离矩阵中的行,避免出现NaN:
    valid_mask = count_df['Origin'].isin(distance_matrix.index) & count_df['Destination'].isin(distance_matrix.columns)
    count_df = count_df[valid_mask].copy()
    
  2. 内存优化:7000x7000的密集矩阵约占392MB(float64类型),若内存紧张,可将矩阵转换为稀疏矩阵(如scipy的csr_matrix),仅存储非零值,再通过索引位置取值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:52:55