Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何计算dataframe中行之间的距离并创建矩阵_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 3.x 如何计算dataframe中行之间的距离并创建矩阵

Python 3.x 如何计算dataframe中行之间的距离并创建矩阵,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有一个这样的数据帧 import pandas as pd sample = pd.DataFrame({'Col1': ['1','0','1','0'],'Col2':['0','0','1','1'],'Col3':['0','0','1','0'],'Class':['A','B','A','B']},index=['Item1','Item2','Item3','Item4']) In [32]: print(sample) Out [32]: Col1 Col2 Col

我有一个这样的数据帧

import pandas as pd
sample = pd.DataFrame({'Col1': ['1','0','1','0'],'Col2':['0','0','1','1'],'Col3':['0','0','1','0'],'Class':['A','B','A','B']},index=['Item1','Item2','Item3','Item4'])
In [32]: print(sample)
Out [32]:
      Col1 Col2 Col3 Class
Item1    1    0    0    A
Item2    0    0    0    B
Item3    1    1    1    A
Item4    0    1    0    B
我想计算不同类的行之间的行距离。我的意思是,首先我想计算从classA开始的行之间的距离

       Item1   Item3
Item1  0       0.67
Item3 0.67     0
第二,B类行之间的距离

       Item2   Item4
Item2  0       1
Item4  1       0

最后是不同班级之间的距离

       Item2   Item4
Item1  1       1
Item3  1       0.67

我试着用DistanceMetric一个接一个地计算距离

from sklearn.neighbors import DistanceMetric
dist = DistanceMetric.get_metric('jacquard')

但是我不知道我能不能在一个大数据帧中的不同行上迭代,并创建这3个不同的矩阵,使用距离来查找a类和B类中的距离,你可以使用
dataframe.groupby
,(使用的距离是
euclidean
):

如果只有两个类,则可以将这两个类分成两个数据帧,然后计算差值:

dist_cols = ['Col1', 'Col2','Col3']
df_a = df[df['Class']=='A']
df_b = df[df['Class']=='B']

distances = dist.pairwise(df_a[dist_cols].values, df_b[dist_cols].values)
distances
> array([[1.        , 1.41421356],
       [1.73205081, 1.41421356]])

pd.DataFrame(distances, columns = df_b.index, index = df_a.index)

          Item2       Item4
Item1   1.000000    1.414214
Item3   1.732051    1.414214

0,1->它是什么?对应的项谢谢,它可以完美地计算类内的距离,但我尝试在没有
groupby
的情况下执行相同的命令来计算不同类之间的距离,但它不起作用:(我能做什么?你只有两个类吗?或者可能有两个以上的类吗?我只有两个类
dist_cols = ['Col1', 'Col2','Col3']
df_a = df[df['Class']=='A']
df_b = df[df['Class']=='B']

distances = dist.pairwise(df_a[dist_cols].values, df_b[dist_cols].values)
distances
> array([[1.        , 1.41421356],
       [1.73205081, 1.41421356]])

pd.DataFrame(distances, columns = df_b.index, index = df_a.index)

          Item2       Item4
Item1   1.000000    1.414214
Item3   1.732051    1.414214