从pandas DataFrame创建差异矩阵

时间:2014-10-13 15:00:23

标签: 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循环完成(效率低下)。有什么更好的方式?

1 个答案:

答案 0 :(得分:2)

您可以使用.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)