В настоящее время у меня есть следующий код Python
forumposts = pd.DataFrame({'UserId': [1,1,2,3,2,1,3], 'FirstPostDate': [2018,2018,2017,2019,2017,2018,2019], 'PostDate': [201801,201802,201701,201901,201801,201803,201902]})
data = forumposts.groupby(['UserId', 'PostDate','FirstPostDate']).size().reset_index()
rankedUserIdByFirstPostDate = data.groupby(['UserId', 'FirstPostDate']).size().reset_index().sort_values('FirstPostDate').reset_index(drop=True).reset_index()
data.loc[:,'Rank'] = data.merge(rankedUserIdByFirstPostDate , how='left', on='UserId')['index'].values
Код работает, как задумано, но это сложно, есть ли способ сделать это, как панды?Намерение следующее:
Создать плотный ранг по столбцу UserId
, отсортированному по FirstPostDate
, так что пользователь с самой ранней публикацией получает ранг 0, а пользователь со второй самой ранней первой публикацией получает ранг.1 и т. Д.
Использование forumposts.UserId.rank(method='dense')
дает мне рейтинг, но сортируется по порядку идентификатора пользователя.