使用pandas中的条件值计算行之间的成对相似性/距离

时间:2016-11-22 15:25:27

标签: python pandas dataframe cosine-similarity

我试图计算共享类别的行之间的值之间的距离。对于user_id 1参数1,1和7 Par 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

1 个答案:

答案 0 :(得分: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