计算 pandas DataFrame 中的距离矩阵

问题描述 投票:0回答:1

我想计算两个系列的所有元素之间的距离:

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

def dist(x, y):
    return x - y #(or some arbitrary function)

我确实使用 numpy 实现了预期结果并转换为数据帧以添加索引和列。

import numpy as np
pd.DataFrame(a.values[np.newaxis, :] - b.values[:, np.newaxis],
             columns=a.index,
             index=b.index)

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

这感觉不像在 DataFrame 上直接操作那样健壮,有没有办法在 pandas 中实现这一点?

python pandas dataframe distance
1个回答
0
投票

在我看来,更快更好的是在这里使用 numpy 进行广播,但只能通过

Series.apply
(较慢)循环使用 pandas 解决方案:

print (b.apply(lambda x: dist(a, x)))
   a  b  c
k -3 -2 -1
l -4 -3 -2
m -5 -4 -3
n -6 -5 -4

print (b.apply(lambda x: a - x))
   a  b  c
k -3 -2 -1
l -4 -3 -2
m -5 -4 -3
n -6 -5 -4
© www.soinside.com 2019 - 2024. All rights reserved.