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