具有排序的浮点索引的数据框中两列之间的值距离
Value distance between two columns in a data frame with sorted, float index
我们有一个数据框,其中包含一个排序的浮点索引和两个应该相同的列。它们的值并不总是存在,并且在最坏的情况下,它们在索引值中没有重叠。目标是能够检查它们彼此之间的距离。
我正在考虑对缺失值进行插值,然后计算距离。这将导致可以计算此距离的大量索引值集合。
另一种方法是比较实际值,并提出一个索引错误,这种比较对它有意义。
问题是哪种方法更有意义以及如何计算距离。结果应该告诉我们它们彼此有多接近,f.e。 0
表示它们是相同的。
示例
我们有一个包含两列 a1
和 a2
的数据框以及一个排序的浮点索引。
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
我们有一个数据框,其中包含一个排序的浮点索引和两个应该相同的列。它们的值并不总是存在,并且在最坏的情况下,它们在索引值中没有重叠。目标是能够检查它们彼此之间的距离。
我正在考虑对缺失值进行插值,然后计算距离。这将导致可以计算此距离的大量索引值集合。
另一种方法是比较实际值,并提出一个索引错误,这种比较对它有意义。
问题是哪种方法更有意义以及如何计算距离。结果应该告诉我们它们彼此有多接近,f.e。 0
表示它们是相同的。
示例
我们有一个包含两列 a1
和 a2
的数据框以及一个排序的浮点索引。
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