gpt4 book ai didi

python - 在 Pandas 数据框中对子组中的行进行排名的更快方法

转载 作者:IT老高 更新时间:2023-10-28 20:44:13 25 4
gpt4 key购买 nike

我有一个由不同子组组成的 pandas 数据框。

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,依此类推开。

现在我通过以下方式评估排名:

  1. 按值排序。
df.sort('value', ascending = True, inplace=True)
  1. 创建一个排序函数(它假定变量已经排序)
def ranker(df):
df['rank'] = np.arange(len(df)) + 1
return df
  1. 分别对每个组应用排名函数:
df = df.groupby(['group']).apply(ranker)

这个过程有效,但是当我在数百万行数据上运行它时它真的很慢。有没有人对如何制作更快的排名功能有任何想法。

最佳答案

rank 是 cythonized,所以应该非常快。您可以传递与 df.rank() 相同的选项 hererank 的文档。如您所见,可以通过 method 参数以五种不同的方式之一完成平局。

您也可能只需要组的 .cumcount()

In [12]: df.groupby('group')['value'].rank(ascending=False)
Out[12]:
0 4
1 1
2 3
3 2
4 3
5 2
6 1
7 4
dtype: float64

关于python - 在 Pandas 数据框中对子组中的行进行排名的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26720916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com