Эффективно конвертировать pandas фрейм данных в один горячий на основе данных в каждой строке - PullRequest
2 голосов
/ 13 марта 2020
import pandas as pd
matrix = [(222, 34, 23),
          (333, 31, 11),
          (444, 16, 21),]
df_recommend = pd.DataFrame(matrix, columns=list('abc'))
df_recommend.index = ['apple','banana','cat']

matrix2 = [(222, 35, 23,99,60),
           (333, 31, 20, 1,2),
           (444,0,21,35,23)]
df_truth = pd.DataFrame(matrix2, columns=list('abcde'))
df_truth.index =  ['apple','banana','cat']

С двумя приведенными выше кадрами данных для каждой строки в df_recommend я хочу проверить, появляются ли элементы в другом кадре данных (df_truth)

df_recommend.apply(lambda x: x.isin(df_truth.loc[x.name]),1).astype(int)

        a   b   c
apple   1   0   1
banana  1   1   0
cat 1   0   1

Интересно, есть ли более эффективный способ, чем выше

1 Ответ

1 голос
/ 13 марта 2020

Я полагаю, что вам нужно, если вы хотите сравнить поэлементно с соответствующими строками на DataFrame.reindex и сравнить на DataFrame.eq:

df1 = df_truth.reindex(index=df_recommend.index, columns=df_recommend.columns)
m = df_recommend.eq(df1).astype(int)
print (m)
        a  b  c
apple   1  0  1
banana  1  1  0
cat     1  0  1

Другая идея с DataFrame.isin:

m = df_recommend.isin(df_truth).astype(int)

m = df_recommend.apply(lambda x: x.isin(df_truth.loc[x.name]),1).astype(int)
print (m)
        a  b  c
apple   1  0  1
banana  1  1  0
cat     1  0  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...