在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
我将如何从这些数据框中找到相似之处?
我不确定这个解决方案,因为我有另一个输出。但也许它会有所帮助。
步骤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