查找 2df python 之间值的相似性

Find similarity of values between 2df python

在python,我的工作有问题。我尝试将我的数据框更改为列表并找到结果,但它不起作用。我的输入有 2 pandas.dataframe。我想通过使用 Df2 的 val1、val2 和 val3 与使用 Df1 的 val1、val2 和 val3 的 item1 进行比较,找到 df1 和 df2 之间的 item1 的相似性。我将使用 Pearson 相关性来查找相似性。

输入:

Df1                                  Df2
 item1 item2  val1 val2 val3          item1 val1 val2 val3
  1      2     0.1  0.2  0.3            1    0.1  0.5  0.7
  1      3     0.2  0.3  0.5            2    0.2  0.8  0.9
  2      4     0.5  0.6  0.7            3    0.7  0.6  0.5
  3      5     0.7  0.2  0.1

输出:

Output :
 item1 item2  similairity         
 1      2       0.235        
 1      3       0.567    
 2      4       0.414         
 3      5       0.231

我如何从这些数据框中找到相似性?

我不确定这个解决方案,因为我有另一个输出。但也许它有帮助。

步骤 1. 创建数据并合并。

import pandas as pd
from scipy.stats.stats import pearsonr

df1 = pd.DataFrame(data=[[1,2,0.1,0.2,0.3],
                         [1,3,0.2,0.3,0.5],
                         [2,4,0.5,0.5,0.7],
                         [3,5,0.7,0.2,0.1]],
                   columns=['item1', 'item2', 'val1', 'val2', 'val3'])

df2 = pd.DataFrame(data=[[1,0.1,0.5,0.7],
                         [2,0.2,0.8,0.9],
                         [3,0.7,0.6,0.5]],
                   columns=['item1', 'val1', 'val2', 'val3'])

df = df1.merge(df2,on='item1')

输出:

   item1  item2  val1_x  val2_x  val3_x  val1_y  val2_y  val3_y
0      1      2     0.1     0.2     0.3     0.1     0.5     0.7
1      1      3     0.2     0.3     0.5     0.1     0.5     0.7
2      2      4     0.5     0.5     0.7     0.2     0.8     0.9
3      3      5     0.7     0.2     0.1     0.7     0.6     0.5

步骤 2. 定义计算相关性的函数。

def corr(df):
    return pd.DataFrame(data=[pearsonr(
        df[['val1_x', 'val2_x', 'val3_x']].as_matrix()[0],
        df[['val1_y', 'val2_y', 'val3_y']].as_matrix()[0])[0]], 
                        columns=['similarity'])

步骤 3. 使用 group by items 并应用 corr-function。

df = df.groupby(['item1', 'item2']).apply(corr).reset_index().drop(['level_2'],1)

输出:

   item1  item2  similarity
0      1      2    0.981981
1      1      3    0.928571
2      2      4    0.609994
3      3      5    0.933257