栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

熊猫数据框中行的距离矩阵

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

熊猫数据框中行的距离矩阵

这里的关键问题是要使用什么距离度量。

假设这是您的数据。

>>> import pandas as pd>>> data = pd.Dataframe(pd.np.random.rand(100, 50))>>> data[data > 0.2] = 1>>> data[data <= 0.2] = pd.np.nan>>> data.head()   0   1   2   3   4   5   6   7   8   9  ...  40  41  42  43  44  45  46  47     1   1   1 NaN   1 NaN NaN   1   1   1 ...   1   1 NaN   1 NaN   1   1   11   1   1   1 NaN   1   1   1   1   1   1 ... NaN   1   1 NaN NaN   1   1   12   1   1   1   1   1   1   1   1   1   1 ...   1 NaN   1   1   1   1   1 NaN3   1 NaN   1 NaN   1 NaN   1 NaN   1   1 ...   1   1   1   1 NaN   1   1   14   1   1   1   1   1   1   1   1 NaN   1 ... NaN   1   1   1   1   1   1   1

有什么不同?

您可以将距离度量计算为每列之间不同的值的百分比。结果显示任意两列之间的%差异。

>>> zero_data = data.fillna(0)>>> distance = lambda column1, column2: (column1 - column2).abs().sum() / len(column1)>>> result = zero_data.apply(lambda col1: zero_data.apply(lambda col2: distance(col1, col2)))>>> result.head()     0     1     2     3     4     5     6     7     8     9   ...     40    0.00  0.36  0.33  0.37  0.32  0.41  0.35  0.33  0.39  0.33  ...   0.371  0.36  0.00  0.37  0.29  0.30  0.37  0.33  0.37  0.33  0.31  ...   0.352  0.33  0.37  0.00  0.36  0.29  0.38  0.40  0.34  0.30  0.28  ...   0.283  0.37  0.29  0.36  0.00  0.29  0.30  0.34  0.26  0.32  0.36  ...   0.364  0.32  0.30  0.29  0.29  0.00  0.31  0.35  0.29  0.29  0.25  ...   0.27

相关系数是多少?

在这里,我们使用皮尔逊相关系数。这是一个完全有效的指标。具体来说,在二进制数据的情况下,它转换为phi系数。

>>> zero_data = data.fillna(0)>>> distance = lambda column1, column2: scipy.stats.pearsonr(column1, column2)[0]>>> result = zero_data.apply(lambda col1: zero_data.apply(lambda col2: distance(col1, col2)))>>> result.head()         0         1         2         3         4         5         6     1.000000  0.013158  0.026262 -0.059786 -0.024293 -0.078056  0.0540741  0.013158  1.000000 -0.093109  0.170159  0.043187  0.027425  0.1081482  0.026262 -0.093109  1.000000 -0.124540 -0.048485 -0.064881 -0.1618873 -0.059786  0.170159 -0.124540  1.000000  0.004245  0.184153  0.0425244 -0.024293  0.043187 -0.048485  0.004245  1.000000  0.079196 -0.099834

顺便说一句,这与使用Spearman R系数得到的结果相同。

欧几里得距离是多少?

>>> zero_data = data.fillna(0)>>> distance = lambda column1, column2: pd.np.linalg.norm(column1 - column2)>>> result = zero_data.apply(lambda col1: zero_data.apply(lambda col2: distance(col1, col2)))>>> result.head()         0         1         2         3         4         5         6     0.000000  6.000000  5.744563  6.082763  5.656854  6.403124  5.9160801  6.000000  0.000000  6.082763  5.385165  5.477226  6.082763  5.7445632  5.744563  6.082763  0.000000  6.000000  5.385165  6.164414  6.3245553  6.082763  5.385165  6.000000  0.000000  5.385165  5.477226  5.8309524  5.656854  5.477226  5.385165  5.385165  0.000000  5.567764  5.916080

到现在为止,您已经了解了模式。创建一个

distance
方法。然后将其成对应用于每一列

data.apply(lambda col1: data.apply(lambda col2: method(col1, col2)))

如果您的

distance
方法依赖于零而不是
nan
s,请使用转换为零
.fillna(0)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/634302.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号