目前我有以下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,依此类推。
Usingforumposts.UserId.rank(method='dense')给了我一个排名,但它按 UserId 的顺序排序。
跃然一笑
相关分类