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

如何在Pandas中直接计算两个Series的元素间距离矩阵?

Pandas原生实现两个Series所有元素间距离的方法

针对你需求的场景,有几种更健壮的Pandas原生实现方式,无需手动处理Numpy数组维度:

方法1:利用Pandas自动广播(最简洁,适合简单算术运算)

直接将其中一个Series转为单列DataFrame,再与另一个Series做运算,Pandas会自动完成广播,同时保留原索引和列名:

import pandas as pd
a = pd.Series([1,2,3], ['a', 'b', 'c'] )
b = pd.Series([4, 5, 6, 7], ['k', 'l', 'm', 'n'])

# 直接运算,自动生成目标DataFrame
result = b.to_frame() - a
print(result)

输出结果:

a  b  c
k -3 -2 -1
l -4 -3 -2
m -5 -4 -3
n -6 -5 -4

方法2:apply配合自定义距离函数(适合复杂自定义逻辑)

如果你的距离函数不是简单算术运算,可通过嵌套apply实现,完全基于Pandas对象操作:

def dist(x, y):
    return x - y  # 替换为任意自定义距离逻辑

result = b.apply(lambda x: a.apply(lambda y: dist(x, y)))
print(result)

该方式会自动保留b的索引作为结果行索引,a的索引作为结果列索引。

方法3:结合numpy ufunc的outer方法(兼顾性能与Pandas结构)

若想利用numpy的向量化性能,同时避免手动处理数组维度,可直接使用numpy通用函数的outer方法,再用Pandas索引构建DataFrame:

import numpy as np

result = pd.DataFrame(np.subtract.outer(b, a), index=b.index, columns=a.index)
print(result)

此方法无需提取values属性,直接传入Series对象即可,比你原有的Numpy实现更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:00:03