2016-11-22 11 views
0

カテゴリを共有する行の値の間の距離を計算しようとしています。 user_idの1パラメータ1の場合は、10、20パンダの条件付き値を持つ行間のペア間類似度/距離の計算

df1 = pd.DataFrame({"user_id":[1,2,1,2], "Par1":[1, 3, 7,9], "Par2":[10, 15, 20, 22]}) 

     Par1 Par2 user_id 
    0  1 10  1 
    1  3 15  2 
    2  7 20  1 
    3  9 22  2 

1〜7パー2の距離との距離が、私は値を合計することができる午前:

df1.groupby([ "user_id"], as_index=False).sum() 

をし、私の質問があり、そこにありますsum()の代わりにpairwise distanceを計算する比較的簡単な方法?

所望の出力

  Par1     Par2   user_id 
    0  similarity[1,7] similarity[10,20]  1 
    1  similarity[3,9] similarity[15,22]  2 
+0

距離によってはどういう意味ですか?インデックスまたは値の違いは? – AlexG

+0

類似性:余弦、ユークリッドまたはいくつかのデルタ法。 – lrn2code

+0

inの2つの数字の間の些細な距離を減算といいます。しかし、あなたが1つのグループに3つの数字を持つときはどうですか? – Boud

答えて

0

これは、あなたの簡単な例のために働くことになりますと、拡張する必要があります。

def distance_metric(x1, x2): 
    return x2 - x1 # replace this with whatever you want 

df_dist = pd.DataFrame() 
df_dist['user_id'] = df.user_id.unique() 

for col in (set(df.columns) - set(['user_id'])): 
    vals = [df[df.user_id == i][col].values for i in df.user_id.unique()] 
    vals = [distance_metric(val[0], val[1]) for val in vals] 
    df_dist[col] = vals 
+0

ありがとう! – lrn2code

関連する問題