def BordaCountMerge(self): """ return: a new DataFrame ranktable, with column=['title', 'rank'] """ if self.cnt==0: return pd.DataFrame(columns=['title', 'rate', 'rank']) ranktable = self.ranktable # ignore all the items that have nan as rank ranktable = ranktable.dropna() methods = ranktable.columns.drop('title') candidate_score = np.zeros((ranktable.shape[0], ranktable.shape[1]-1), np.int32) for c in xrange(methods.shape[0]): method = methods[c] tmprank = ranktable[['title', method]].sort_values(by=method) tmprank['_borda_score'] = pd.Series( self._get_borda_score(tmprank.loc[:,method].values), index=tmprank.index) tmprank.sort_index(inplace=True) candidate_score[:, c]=tmprank.loc[:,'_borda_score'] borda_score = candidate_score.sum(axis=1) tmpitemlst = pd.DataFrame({'itemid': ranktable.loc[:,'title'], 'index': range(ranktable.shape[0])}, columns=['itemid', 'index']) ranker = BaseRank(tmpitemlst) rtn = ranker.rank(borda_score) return rtn
def AverageRankMerge(self): if self.cnt==0: return pd.DataFrame(columns=['title', 'rate', 'rank']) ranktable = self.ranktable ranktable = ranktable.dropna() methods = ranktable.columns.drop('title') average_score = ranktable[methods].sum(axis=1).values tmpitemlst = pd.DataFrame({'itemid': ranktable.loc[:,'title'], 'index': range(ranktable.shape[0])}, columns=['itemid', 'index']) ranker = BaseRank(tmpitemlst, ascending=True) rtn = ranker.rank(average_score) return rtn
def same_rate_test(): ranker = BaseRank(sample_item_list, ascending=True) ranktable = ranker.rank(sample_rate) ranktable = ranktable[["title", "rate", "rank"]] assert_array_equal(ranktable.iloc[:, 2].values, np.array([1, 1, 3], dtype=np.int32))