2017-11-05 29 views
1

私は3つの変数を持つデータフレーム(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などを探しています。私は、ループ(および一般的にはPythonの)ために使用する新しいですし、私の現在の試みは非常に遠く取得されていません。最後の3行のコンテキストのための

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) 

は、私はの平方根を取るしようとしています各行項目の違い。したがって、新しいベクトルの行600までのすべての行の違いについて、この結果を保存します。

あなたはさらに文脈をご希望の場合、私は「減法クラスタリング」アルゴリズムの第2段階、次のようになるための式を実装しようとしています:

RA = 1

formula

+1

かなり確信して。私の頭の上からどれだけ離れているかを伝えるためにパンダに十分な知識はありません。 –

答えて

2

最初の行は、このようなilocにアクセスすることができます。

row1 = df.iloc[0] 

そして、我々が行に適用されます使用することができます最後に1:

df.iloc[1:].apply(lambda x: np.sqrt(sum((row1-x)**2)), axis=1).values 

戻り値:あなたは(とすべきである)明示的なループせずにすべてのことを行うことができます

array([ 0.59025138, 0.55848 , 0.5046703 , 0.35988505]) 
+2

'df.iloc [0]'は、データフレームの最初の行を取得するためのより良い方法です。対照的に、 'df.loc [0]'は索引が0の行を取得します。これは問題の最初の行ですが、一般的には機能しません。 – Michael

+0

@マイケルええ、そうです。更新しました。 –

関連する問題