我正在尝试在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组保持在最高位置。
有什么想法?提前谢谢。
答案 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