ルイ法:
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']
上記2データフレームでは、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
上記よりも効率的な方法があるのだろうか
エズレル:
私希望がマッチした行を要素ごとに比較した場合、あなたが必要と考えている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