Найти сходство значений между 2df Python - PullRequest
0 голосов
/ 03 сентября 2018

В питоне у меня проблемы с работой. Я попытался изменить свой фрейм данных, чтобы быть в списке и найти результат, но он не работает. Мой вклад имеет 2 pandas.dataframe. Я хотел бы найти сходство item1 между df1 и df2, используя val1, val2 и val3 из Df2, чтобы сравнить с item1, используя val1, val2 и val3 из Df1. Я буду использовать корреляцию Пирсона, чтобы найти сходство.

Введите:

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 Ответ

0 голосов
/ 03 сентября 2018

Я не уверен насчет этого решения, потому что у меня есть другой вывод. Но, возможно, это поможет.

Шаг 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. Используйте группирование по элементам и примените функцию corr.

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
...