我有一个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
循环完成(效率低下)。有什么更好的方式?
答案 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)