我有一个带有三个变量的数据帧(称为df),其头部如下所示。有600行数据。
X1 X2 X3
0 0.049150 0.270032 0.577858
1 0.602387 0.065492 0.555747
2 0.598355 0.235002 0.482744
3 0.522151 0.253991 0.402630
4 0.402601 0.206630 0.553987
我试图从第一行中减去每一行。也就是说,我正在寻找row1 - row2,然后是row1 - row3,依此类推。我是新手使用for循环(以及一般的Python),而我目前的尝试并没有走得太远:
for i in range(len(df)):
diff[i] = df.iloc[0,:] - df.iloc[i,:]
diff2 = math.sqrt((diff[0])**2 + (diff[1])**2 + (diff[2])**2)
print(diff2)
对于最后三行的上下文,我试图取每个行项之间差异的平方根。所以,
sqrt((row1col1-row2col1)^2 + (row1col2 - row2col2)^2 + (row1col3 - row2col3)^2)
然后我想在新的向量中存储所有行差异直到第600行的结果。
如果您想了解更多上下文,我正在尝试实施“减法聚类”算法的第二步,其公式如下:
其中ra = 1
答案 0 :(得分:2)
可以使用iloc访问第一行,如下所示:
row1 = df.iloc[0]
然后我们可以在第1行使用apply来结束:
df.iloc[1:].apply(lambda x: np.sqrt(sum((row1-x)**2)), axis=1).values
返回:
array([ 0.59025138, 0.55848 , 0.5046703 , 0.35988505])