查找 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
在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