2016-11-22 21 views
0

我試圖計算共享一個類別的行之間的值之間的距離。對於USER_ID 1參數1,距離1和7之間帕2距離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 

我能夠總結值:

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

和我的問題是,是否有計算配對距離代替sum()的相對簡單方法?

所需的輸出

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

你是什麼意思的距離?索引或值的區別? – AlexG

+0

相似度:餘弦,歐幾里得或一些delta方法。 – lrn2code

+0

ℕ中兩個數字之間的平凡距離稱爲減法。但是當你在一組中有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

相關問題