当前位置: 首页 > 面试题库 >

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

明宜年
2023-03-14
问题内容

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

    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)

此过程有效,但是当我对数百万行的数据运行时,它确实很慢。是否有人对如何实现更快的排名功能有任何想法。


问题答案:

等级被cythonized,所以应该非常快。你也可以通过相同的选项,df.rank()
这里是文档的rank。如您所见,可以通过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


 类似资料:
  • 问题内容: 我有一个由数组组成的数组。我想通过子数组的属性对父数组进行排序。这是一个例子 我想通过在子数组中升序对父数组进行排序,因此在这种情况下,结果将是子数组颠倒(,)。使用众多的PHP排序函数中的任何一种,是否可能? 问题答案: 您可以将usort函数用作:

  • 我有一个,有200多列。问题在于订单生成时 我需要对这些列进行如下排序: 我有办法在Python中做到这一点吗?

  • 问题内容: 给定一个记录某些书籍使用情况的数据框,如下所示: 我需要获取所有书籍的数量,保留其他列并获取以下内容: 如何才能做到这一点? 谢谢! 问题答案: 您需要以下内容: 在您的情况下,“名称”,“类型”和“ ID”列的值匹配,因此我们可以对它们进行调用,然后单击。 另一种方法是使用添加“ Count”列,然后调用:

  • 问题内容: 我有以下查询: 该查询的目标是从route_table(由routeid,observation_time,lat和lon列组成)中提取所有lon / lat值,按routeid对其进行分组,并在每个组中按观察时间对它们进行排序。但是,上面的SQL无效,因为observation_time出现在ORDER BY子句中,而不出现在GROUP BY中。当我将observation_time

  • 问题内容: 我有一个看起来像这样的数据框: 它是使用以下代码创建的: 我要做的是根据预定义的列表对行(带有索引)进行排序。结果是: 我该如何实现? 问题答案: 你可以使用预定义的顺序设置指标像 但是,如果按字母顺序排列,则可以使用 如下所示,您需要将其分配给一些变量

  • 本文向大家介绍java对数组进行排序的方法,包括了java对数组进行排序的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java对数组进行排序的方法。分享给大家供大家参考。具体如下: 执行结果: 排序前:  12 24 25 4 9 68 45 7   排序后:  4 7 9 12 24 25 45 68 希望本文所述对大家的java程序设计有所帮助。