【发布时间】:2019-03-15 09:55:27
【问题描述】:
我有一个由不同子组组成的熊猫数据框。
df = pd.DataFrame({
'id':[1, 2, 3, 4, 5, 6, 7, 8],
'group':['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b'],
'value':[.01, .4, .2, .3, .11, .21, .4, .01]
})
我想找到其组中每个 id 的排名,例如,越低的值越好。在上面的示例中,在 A 组中,Id 1 的等级为 1,Id 2 的等级为 4。在 B 组中,Id 5 的等级为 2,Id 8 的等级为 1,依此类推在。
现在我通过以下方式评估排名:
-
按值排序。
df.sort('value', ascending = True, inplace=True) -
创建一个排序函数(它假定变量已经排序)
def ranker(df): df['rank'] = np.arange(len(df)) + 1 return df -
分别对每个组应用排名函数:
df = df.groupby(['group']).apply(ranker)
这个过程有效,但是当我在数百万行数据上运行它时它真的很慢。有没有人对如何制作更快的排名功能有任何想法。
【问题讨论】: