具有排序的浮点索引的数据框中两列之间的值距离

Value distance between two columns in a data frame with sorted, float index

我们有一个数据框,其中包含一个排序的浮点索引和两个应该相同的列。它们的值并不总是存在,并且在最坏的情况下,它们在索引值中没有重叠。目标是能够检查它们彼此之间的距离。

我正在考虑对缺失值进行插值,然后计算距离。这将导致可以计算此距离的大量索引值集合。

另一种方法是比较实际值,并提出一个索引错误,这种比较对它有意义。

问题是哪种方法更有意义以及如何计算距离。结果应该告诉我们它们彼此有多接近,f.e。 0 表示它们是相同的。

示例

我们有一个包含两列 a1a2 的数据框以及一个排序的浮点索引。

df = pd.DataFrame({'a1':[6.1, np.nan, 6.8, 7.5, 7.9], 
                   'a2':[6.2, 6.6, 6.8, np.nan, 7.7]}, 
                  index=[0.10, 0.11, 0.13, 0.16, 0.17])

        a1   a2
0.10   6.1  6.2
0.11   NaN  6.6
0.13   6.8  6.8
0.16   7.5  NaN
0.17   7.9  7.7

如果你的objective是得到插值向量的absolute distance你可以按如下步骤进行:

r = pd.interpolate()
absolute_sum = (r["a1"] - r["a2"]).abs().sum()

对于给定的示例,结果是 0.7000000000000011

不过,如果您对这两列的相似程度感兴趣,可以查看 correlation coefficient

r = pd.interpolate()
correlation = r["a1"].corr("a2")

对于给定的示例,结果是 0.9929580338258082

既然你提到了距离

from scipy.spatial import distance
df=df.interpolate(axis=0)
pd.DataFrame(distance.cdist(df.values, df.values, 'euclidean'),columns=df.index,index=df.index)
Out[468]: 
          0.10      0.11      0.13      0.16      0.17
0.10  0.000000  0.531507  0.921954  1.750000  2.343075
0.11  0.531507  0.000000  0.403113  1.234909  1.820027
0.13  0.921954  0.403113  0.000000  0.832166  1.421267
0.16  1.750000  1.234909  0.832166  0.000000  0.602080
0.17  2.343075  1.820027  1.421267  0.602080  0.000000