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

时间:2018-07-03 14:12:00

标签: python pandas dataframe distance

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

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

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

问题是哪种方法更有意义,以及如何计算距离。结果应该告诉我们它们彼此之间有多近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

2 个答案:

答案 0 :(得分:1)

如果您的目标是获取内插矢量的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

答案 1 :(得分:0)

自从您提到距离

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