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

问题描述 投票:-1回答:1

在python中,我的工作有问题。我试图将我的数据框更改为列表并找到结果,但它不起作用。我的输入有2个pandas.dataframe。我想通过使用Df2的val1,val2和val3来比较项目1在df1和df2之间的相似性,通过使用Df1的val1,val2和val3来比较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

我将如何从这些数据框中找到相似之处?

python pandas similarity
1个回答
1
投票

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

步骤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
© www.soinside.com 2019 - 2024. All rights reserved.