我有一个包含两列“作者”及其“等级”的数据框。我需要计算每个唯一作者的总排名。总共有230万位独特的作者,而我当前数据框架的维度是13248457,2。 我当前的解决方案需要花很长时间才能执行,我相信词典会加快这一过程,但我不知道如何使用词典。
以下代码是我尝试解决此问题的方法,但是执行将花费数小时。
for auth in unique_auth:
unique_auth_ranks.append(np.sum(list((df[df.authors == auth ])['rank'])))
如果我可以将unique_authors设置为字典的键并对其排名求和,则它可能会更快运行,但我以前从未在python中使用过字典。
排名是数值,例如作者“ abc”出现3次,排名为“ 1”,“ 3”和“ 5”,我希望最终结果为“ abc”:“ 9”
答案 0 :(得分:0)
IIUC:您的数据如下所示:
AuthorName rank
0 author1 1
1 author2 2
2 author1 3
3 author1 4
4 author3 5
5 author3 6
6 author5 7
7 author3 8
你想要的
df = df.groupby('AuthorName').sum()
返回:
rank
AuthorName
author1 8
author2 2
author3 19
author5 7
由于author1
的排名为1,3,4,因此排名总和为8。
使用groupby很快。 df[df.authors == auth ]
不会要求熊猫在整个数据框中查找每个唯一作者姓名(即groupby
),而是会在汇总数据之前为每个作者姓名映射位置。