我有一个 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/