python - 从 pandas DataFrame 创建差异矩阵

标签 python pandas numpy matrix dataframe

我有一个 Pandas DataFrame [10 行和 1 列 (C)]

df = data.ix[0:9, 0]

我想创建一个矩阵,显示每个元素之间的距离 [10 行和 10 列],如下所示:

C0 - C0   C1-C0  …  Cn-C0
C0 - C1   C1-C1  …  Cn-C1
C0 - C2   C1-C2  …  Cn-C2
 …    …     …    …   …
C0 - C9   C1-C9  …  Cn-Cn

我知道这可以通过两个 for 循环来完成(效率低下)。更好的方法是什么?

最佳答案

您可以使用 .values 方法将 DataFrame 或 Series 的值放入 NumPy 数组中,例如:

df.C.values

要创建矩阵,您可以从数组 df.C 中减去数组本身,如下所示:

df.C.values - df.C.values[:, np.newaxis] # also see @immerrr's comment 

这将创建一个具有所需值的 NumPy 数组。

例如:

>>> df = pd.DataFrame({'C': range(5)})   
   C
0  0
1  1
2  2
3  3
4  4

>>> df.C.values - df.C.values[:, np.newaxis]
array([[ 0,  1,  2,  3,  4],
       [-1,  0,  1,  2,  3],
       [-2, -1,  0,  1,  2],
       [-3, -2, -1,  0,  1],
       [-4, -3, -2, -1,  0]], dtype=int64)

关于python - 从 pandas DataFrame 创建差异矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26343017/

相关文章:

python - 基于两列的组合过滤 Pandas 数据框

python - 在 Pandas 中是否有等效于 R 的 data.table fread cmd 关键字?

python - 如何正确使用 cv2.imwrite 将图像保存在带有 cv2.selectROI 的 openCV 中

python - 类方法作为构造函数和继承

python - Postgres 9.4.0 上缺少 plpythonu.control

python - 在 pandas 中打开文本文件时仅选择某些行

python - 从多维 numpy 数组中查找和删除

python - 将 numpy 数组追加到元素中

python - 从 Pandas 的列中删除错误值

python - 计算 Pandas 系列 float 中的出现次数