在Pandas组内排序而不更改组位置

时间:2015-04-22 20:40:14

标签: python pandas

我正在尝试在pandas组中进行排序,而不实际更改Dataframe中的组位置。

原始数据框采用以下格式:

    group   name  revenue
0  GroupB  Name1        1
1  GroupB  Name2        2
2  GroupB  Name3        3
3  GroupA  Name4        4
4  GroupA  Name5        5
5  GroupA  Name6        6

我正在努力实现以下输出:

    group   name  revenue
0  GroupB  Name3        3
1  GroupB  Name2        2
2  GroupB  Name1        1
3  GroupA  Name6        6
4  GroupA  Name5        5
5  GroupA  Name4        4

这是我的代码:

import pandas as pd

df = pd.DataFrame({'name': ['Name1','Name2','Name3','Name4','Name5','Name6'], 
    'group':['GroupB','GroupB','GroupB','GroupA','GroupA','GroupA'],'revenue':[1,2,3,4,5,6]})

def sort_group(grp):
    grp = grp.sort(columns='revenue',ascending=False)
    return grp

df = df.groupby('group').apply(sort_group)

print df

我得到的结果是:

           group   name  revenue
group
GroupA 5  GroupA  Name6        6
       4  GroupA  Name5        5
       3  GroupA  Name4        4
GroupB 2  GroupB  Name3        3
       1  GroupB  Name2        2
       0  GroupB  Name1        1

基本上,我目前的代码将B组转移到A组,但我希望B组保持在最高位置。

有什么想法?提前谢谢。

1 个答案:

答案 0 :(得分:1)

类似的东西:

df.sort(['group', 'revenue'], ascending=False).reset_index(drop=True)

它给了我

    group   name    revenue
0   GroupB  Name3   3
1   GroupB  Name2   2
2   GroupB  Name1   1
3   GroupA  Name6   6
4   GroupA  Name5   5
5   GroupA  Name4   4