组之间排名更快的版本,然后按组和排名进行排序

时间:2017-07-07 09:38:12

标签: python pandas sorting numpy rank

我有一个这样的数据框:

df = pd.DataFrame({"name":["Foo", "Foo", "Baar", "Foo", "Baar", "Foo", "Baar", "Baar"], 
               "count_1":[5,10,12,15,20,25,30,35], 
               "count_2" :[100,150,100,25,250,300,400,500]})

我需要首先确保所有不同的群组(例如,此处的名称)具有更高的count_2。我目前在组之间进行排名,然后按组和排名对数据框进行排序,以移动具有更高排名的不同组。

df['rank'] = df.groupby("name")["count_2"].rank(method="max", ascending=False)
df = df.sort_values(by=["rank", "count_2"], ascending=[True, False])
df["final_rank"] = xrange(1,len(df)+1)

它会产生我想要的结果,如下所示:

 count_1    count_2  name   rank   final_rank
   35        500     Baar    1      1
   25        300    Foo      1      2
   30        400    Baar     2      3
   10        150    Foo      2      4
   20        250    Baar     3      5
   5         100    Foo      3      6
   12        100    Baar     4      7
   15         25    Foo      4      8

然而,这是相对缓慢的,因为我需要在不同的数据集上重复执行它,并且需要它非常快,我在30行的DF上进行测试。

我问其他任何提高速度的方法?越快越好!

非常感谢

0 个答案:

没有答案