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

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并转换为DataFrame来添加索引和列,从而达到了预期的结果.

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中实现这一点?

推荐答案

在我看来,更快更好地在这里使用麻木的广播,但可能只有Pandas 的解决方案循环到Series.apply(更慢):

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

#your solution (a bit simplier)
df = pd.DataFrame(a.to_numpy() - b.to_numpy()[:, None],
                  columns=a.index,
                  index=b.index)
print (df)
   a  b  c
k -3 -2 -1
l -4 -3 -2
m -5 -4 -3
n -6 -5 -4

Python相关问答推荐

两极按组颠倒顺序

从多行文本中提取事件对

合并其中一个具有重叠范围的两个框架的最佳方法是什么?

如何在不使用字符串的情况下将namedtuple属性传递给方法?

inspect_asm不给出输出

已删除的构造函数调用另一个构造函数

如何将Matplotlib的fig.add_axes本地坐标与我的坐标关联起来?

如何使用stride_tricks.as_strided逆转NumPy数组

用gekko解决的ADE方程系统突然不再工作,错误消息异常:@错误:模型文件未找到.& &

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

如何使用Python将工作表从一个Excel工作簿复制粘贴到另一个工作簿?

在Python中处理大量CSV文件中的数据

rame中不兼容的d类型

如何在polars(pythonapi)中解构嵌套 struct ?

如何在类和classy-fastapi -fastapi- followup中使用FastAPI创建路由

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

在Python中计算连续天数

如何排除prefecture_related中查询集为空的实例?

寻找Regex模式返回与我当前函数类似的结果

合并与拼接并举